当前位置: 首页 > news >正文

实验六:Java流式编程与网络程序设计

一、字节输入/输出流实现数据的保存和读取

编程要求

根据提示,在右侧编辑器补充代码。 编写应用程序(SortArray.java),使用字节输入/输出流实现数据的保存和读取。 要求功能如下:

  • 输入1~100之间的整型数据保存到数组(数组大小为10)中
  • 将数组排序(由小到大)后的元素保存到指定的文件中
  • 如果文件不存在,则创建文件
  • 从文件中读取排序后的元素并按指定格式输出
  • 利用异常处理机制处理可能发生的错误

测试说明

平台会对你编写的代码进行测试:

测试输入:70 94 21 43 76 60 70 37 75 80

预期输出: 21<37<43<60<70<70<75<76<80<94

代码

package step2;
import java.io.*;
import java.util.Scanner;public class Encrypt {public static void main(String[] args) throws IOException {// 创建要发送的电报Scanner sc = new Scanner(System.in);String data = sc.next();// 将电报分割成字符数组/********** Begin **********/char[] area = data.toCharArray();/********** End **********/// 打开指定存放电报的文件,如果文件不存在,则创建File file = new File("data.txt");if (!file.exists()) {file.createNewFile();}// 循环遍历字符数组,将每个字符加密处理for (int i = 0; i < area.length; i++) {area[i] = (char) (area[i] ^ 'q');}// 利用字符输出流FileWriter将加密后的字符数组写入文件中/********** Begin **********/FileWriter fw = new FileWriter(file);fw.write(area);fw.flush();fw.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文输出/********** Begin **********/FileReader fr1 = new FileReader(file);char[] buf1 = new char[10];int n;System.out.println("密文:");while ((n = fr1.read(buf1)) != -1) {String s = new String(buf1);System.out.print(s);}System.out.println();fr1.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文转换为明文输出/********** Begin **********/FileReader fr2 = new FileReader(file);char[] buf2 = new char[10];System.out.println("明文:");while ((n = fr2.read(buf2)) != -1) {for (int i = 0; i < n; i++) {buf2[i] = (char) (buf2[i] ^ 'q');}String s = new String(buf2);System.out.print(s);}fr2.close();/********** End **********/}
}

二、字符输入/输出流实现发送电报

编程要求

根据提示,在右侧编辑器补充代码。

  • 电报内容经过加密后使用字符输出流存储在指定的文件中
  • 如果文件不存在,则创建文件
  • 使用字符输入流从文件中分别读取密文和明文的内容并显示出来
  • 利用异常处理机制处理可能发生的错误

注意:在对字符加密时采用了异或(^q)的简单字符加密处理,解密时也要进行逐个字符异或(^q)的处理。

测试说明

平台会对你编写的代码进行测试:

测试输入: 今晚10点发动总攻

预期输出: 密文: 亻昫@A烈厠務恊敊 明文: 今晚10点发动总攻

代码

package step2;
import java.io.*;
import java.util.Scanner;public class Encrypt {public static void main(String[] args) throws IOException {// 创建要发送的电报Scanner sc = new Scanner(System.in);String data = sc.next();// 将电报分割成字符数组/********** Begin **********/char[] area = data.toCharArray();/********** End **********/// 打开指定存放电报的文件,如果文件不存在,则创建File file = new File("data.txt");if (!file.exists()) {file.createNewFile();}// 循环遍历字符数组,将每个字符加密处理for (int i = 0; i < area.length; i++) {area[i] = (char) (area[i] ^ 'q');}// 利用字符输出流FileWriter将加密后的字符数组写入文件中/********** Begin **********/FileWriter fw = new FileWriter(file);fw.write(area);fw.flush();fw.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文输出/********** Begin **********/FileReader fr1 = new FileReader(file);char[] buf1 = new char[10];int n;System.out.println("密文:");while ((n = fr1.read(buf1)) != -1) {String s = new String(buf1);System.out.print(s);}System.out.println();fr1.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文转换为明文输出/********** Begin **********/FileReader fr2 = new FileReader(file);char[] buf2 = new char[10];System.out.println("明文:");while ((n = fr2.read(buf2)) != -1) {for (int i = 0; i < n; i++) {buf2[i] = (char) (buf2[i] ^ 'q');}String s = new String(buf2);System.out.print(s);}fr2.close();/********** End **********/}
}

三、简单TCP通信

编程要求

根据提示,在右侧编辑器补充代码,使用Socket和ServerSocket套接字编程,完成简单的TCP通信。

测试说明

平台会对你编写的代码进行测试:

测试输入:张三

预期输出: 你已经连上服务器了,告诉我你的姓名... 再见:张三

代码

package step3;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {Server server = new Server();server.start();Scanner sc = new Scanner(System.in);//创建客户端Socket(s),指定服务器端IP地址和端口号/********** Begin **********/Socket s = new Socket("127.0.0.1", 8000);/**********  end  **********/DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());System.out.println(dis.readUTF());String name = sc.next();dos.writeUTF(name);System.out.println(dis.readUTF());s.close();}
}
package step3;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread {@Overridepublic void run() {try {//创建服务器端ServerSocket(ss),指定端口号8000/********** Begin **********/ServerSocket ss =new ServerSocket(8000);/**********  end  **********/Socket s = ss.accept();DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());dos.writeUTF("你已经连上服务器了,告诉我你的姓名...");String name = dis.readUTF();dos.writeUTF("再见:" + name);s.close();} catch (IOException e) {e.printStackTrace();}}
}

四、TCP通信实现奇偶数判断

编程要求

根据提示,在右侧编辑器补充代码,对输入的整数进行奇偶性判断;当输入的整数为-1时,程序结束运行。

测试说明

平台会对你编写的代码进行测试:

测试输入:1 2 3 4 -1

预期输出: 请输入一个整数,我知道是奇数还是偶数 1是...奇数 2是...偶数 3是...奇数 4是...偶数

代码

 package step4;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;public class ClientPlus {public static void main(String[] args) {Scanner sc = new Scanner(System.in);ServerPlus server = new ServerPlus();server.start();try {//创建客户端Socket(s),指定服务器端IP地址和端口号/********** Begin **********/Socket s = new Socket("127.0.0.1", 8000);/**********  end  **********/DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());//客户端通过循环依次接收服务器返回的结果,并输入新的整数传递给服务器/********** Begin **********/while(true){System.out.println(dis.readUTF());String num = sc.next();dos.writeUTF(num);}/**********  end  **********/} catch (EOFException e) {} catch (IOException e) {e.printStackTrace();}}
}
package step4;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class ServerPlus extends Thread {@Overridepublic void run() {try {/********** Begin **********///创建服务器端ServerSocket(ss),指定端口号8000ServerSocket ss = new ServerSocket(8000);/**********  end  **********/Socket s = ss.accept();DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());ReceiveThread thread = new ReceiveThread(s, dos, dis);thread.start();} catch (IOException e) {e.printStackTrace();}}
}
 package step4;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;class ReceiveThread extends Thread {DataOutputStream dos;DataInputStream dis;Socket s;public ReceiveThread(Socket s, DataOutputStream dos, DataInputStream dis) {this.s = s;this.dos = dos;this.dis = dis;}@Overridepublic void run() {try {dos.writeUTF("请输入一个整数,我知道是奇数还是偶数");while(true) {String num = dis.readUTF();if("-1".equals(num)) {s.close();break;} String result = (Integer.parseInt(num)%2==0)?"偶数":"奇数";dos.writeUTF(num + "是..." + result);}			} catch (SocketException e) {try {s.close();} catch (IOException e1) {e1.printStackTrace();}} catch (IOException e) {System.out.println("数据读取异常");} }	
}

相关文章:

实验六:Java流式编程与网络程序设计

一、字节输入/输出流实现数据的保存和读取 编程要求 根据提示&#xff0c;在右侧编辑器补充代码。 编写应用程序&#xff08;SortArray.java&#xff09;&#xff0c;使用字节输入/输出流实现数据的保存和读取。 要求功能如下&#xff1a; 输入1~100之间的整型数据保存到数组…...

金字塔原理

金字塔原理 来自于麦肯锡公司的第一位女性咨询顾问芭芭拉•明托的著作《金字塔原理》。 原理介绍 此原理是一种重点突出、逻辑清晰、主次分明的逻辑思路、表达方式和规范动作。 金字塔的基本结构是&#xff1a;中心思想明确&#xff0c;结论先行&#xff0c;以上统下&#xff…...

VR全景技术助力政务服务大厅数字化,打造全新政务服务体验

引言&#xff1a; 随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术逐渐走进人们的视野。VR全景技术作为VR领域的一项重要应用&#xff0c;以其沉浸式、交互式的特点&#xff0c;正逐渐渗透到各行各业。政务服务大厅作为相关部门与民众之间的桥梁&#…...

使用Python实现SVM来解决二分类问题

下面是一个使用Python实现SVM来解决二分类问题的例子&#xff1a; # 导入所需的库 from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.svm import SVC import matplotlib.pyplot as plt# 生成一个二分类数据集 X, …...

合并PDF出现OOM异常

优化方法一&#xff1a;使用PdfSmartCopy类代替PdfCopy类。这个类可以在合并PDF文件时&#xff0c;检测并消除重复的对象&#xff0c;从而减少内存的占用。您可以参考以下代码示例&#xff1a; //创建一个Document对象 Document document new Document();//创建一个PdfSmartC…...

c语言-数据结构-链式二叉树

目录 1、二叉树的概念及结构 2、二叉树的遍历概念 2.1 二叉树的前序遍历 2.2 二叉树的中序遍历 2.3 二叉树的后序遍历 2.4 二叉树的层序遍历 3、创建一颗二叉树 4、递归方法实现二叉树前、中、后遍历 4.1 实现前序遍历 4.2 实现中序遍历 4.3 实现后序遍历 5、…...

DelayQueue介绍

5.1 DelayQueue介绍&应用 DelayQueue就是一个延迟队列&#xff0c;生产者写入一个消息&#xff0c;这个消息还有直接被消费的延迟时间。 需要让消息具有延迟的特性。 DelayQueue也是基于二叉堆结构实现的&#xff0c;甚至本事就是基于PriorityQueue实现的功能。二叉堆结构…...

centos8 redis 6.2.6源码安装+主从哨兵

文章目录 centos8 redis 6.2.6源码安装主从哨兵下载解压编译安装配置配置systemd服务启停及开机启动登录验证主从同步配置哨兵哨兵注册systemd centos8 redis 6.2.6源码安装主从哨兵 单机安装 下载解压 cd /data wget http://download.redis.io/releases/redis-6.2.6.tar.gz…...

机器学习之危险品车辆目标检测

危险品的运输涉及从离开仓库到由车辆运输到目的地的风险。监控事故、车辆运动动态以及车辆通过特定区域的频率对于监督车辆运输危险品的过程至关重要。 在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数…...

DHCP协议及实验omnipeek抓包工具分析 IPv4协议

一 抓包命令 adb shell tcpdump -i wlan0 -w /data/tcpdump.pcap 抓包后截图如下 二 DHCP是什么 2.1 DHCP定义 DHCP( Dynamic Host Configuration Protocol, 动态主机配置协议)定义: 存在于应用层(OSI) 前身是BOOTP(Bootstrap Protocol)协议 是一个使用UDP(User …...

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信&#xff0c;表示自己已经过了8月份的PMP考试&#xff0c;开始着手往项目管理岗位转型&#xff0c;但是对于项目管理岗位的面试却一筹莫展。放轻松&#xff0c;大家的需求喜番都了解了&#xff0c;喜番给大家总结了一些项目经理在面试的时…...

技巧-PyTorch中num_works的作用和实验测试

简介 在 PyTorch 中&#xff0c;num_workers 是 DataLoader 中的一个参数&#xff0c;用于控制数据加载的并发线程数。它允许您在数据加载过程中使用多个线程&#xff0c;以提高数据加载的效率。 具体来说&#xff0c;num_workers 参数指定了 DataLoader 在加载数据时将创建的…...

Android:FragmentTransaction

上一篇Android&#xff1a;FragmentTransaction我们大概介绍了FragmentManager的大致工作流程&#xff0c;知道了每个动作都会添加到Op队列里&#xff0c;并由FragmentTransaction进行管理&#xff0c;那么我们就来看看FragmentTransaction的具体内容。 首先FragmentTransacti…...

5.golang字符串的拆解和拼接

字符串是 Go 中的字节切片。可以通过将一组字符括在双引号中来创建字符串" "。Go 中的字符串是兼容Unicode编码的&#xff0c;并且是UTF-8编码的。 访问字符串的单个字节或字符 由于字符串是字节切片&#xff0c;因此可以访问字符串的每个字节。 func printStr(s …...

配置 Mantis 在 Windows 上的步骤

配置 Mantis Bug Tracker 在 Windows 上的步骤 Mantis Bug Tracker 是一款开源的缺陷跟踪系统&#xff0c;用于管理软件开发中的问题和缺陷。在 Windows 环境下配置 Mantis 可以帮助开发者更方便地进行项目管理。以下是一个详细的教程&#xff0c;包含了 EasyPHP Devserver 和…...

Android 单元测试初体验(二)-断言

[TOC](Android 单元测试初体验(二)-断言) 前言 当初在学校学安卓的时候&#xff0c;老师敢教学进度&#xff0c;翻到单元测试这一章节的时候提了两句&#xff0c;没有把单元测试当重点讲&#xff0c;只是说我们工作中几乎不会用到&#xff0c;果真在之前的几年工作当中我真的没…...

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(一) 图片数据转成base64编码方式 #include <ros/ros.h> #include <signal.h> #include <sensor_msgs/Image.h> #include <message_filters/subscriber.h> #include <message_filt…...

【 Kubernetes 风云录 】- Istio 应用多版本流量控制

文章目录 原理实现DeploymentVirtualServiceDestinationRule 约束部署 目的: 根据不同的引擎版本&#xff0c;可以把请求发送到指定的引擎上。可以实现版本降级。 原理 Istio通过VirtualService和DestinationRule两个资源对象来实现流量管理&#xff0c;其中VirtualService用于…...

比尔盖茨:GPT-5不会比GPT-4好多少,生成式AI已达到极限

比尔盖茨一句爆料&#xff0c;成为机器学习社区热议焦点&#xff1a; “GPT-5不会比GPT-4好多少。” 虽然他已不再正式参与微软的日常运营&#xff0c;但仍在担任顾问&#xff0c;并且熟悉OpenAI领导团队的想法。 消息来自德国《商报》&#xff08;Handelsblatt&#xff09;对…...

let const 与var的区别

1、let可以形成块级作用域&#xff0c;在es6之前javascript只有函数作用域&#xff0c;没有块级作用域。在es6之前实现块级作用域: 2、可以看到通过一个立即执行函数表达式&#xff0c;我们实现了一个局部作用域或者块级作用域&#xff0c;但是有了let之后就不需要写这样的代…...

ARM指令追踪技术及TRCVICTLR寄存器详解

1. ARM指令追踪技术概述在嵌入式系统开发和调试过程中&#xff0c;指令追踪&#xff08;Instruction Trace&#xff09;是一项至关重要的技术。它通过硬件机制记录处理器的执行流程&#xff0c;为开发者提供程序运行的完整轨迹。ARM架构从v7开始引入嵌入式跟踪宏单元&#xff0…...

[智能体-69]:重新认知MCP:协议不生产智能,只是AI全域交互的标准化基石

MCP只是提供了大模型、编排调度、外部工具能够进行结构化交流的标准&#xff0c;而整个系统的智能主要依赖编排调度&#xff0c;与外部软件系统的交互取决于外部工具&#xff0c;包括外部语音交互、视觉交互、数字化交互。当下MCP&#xff08;Model Context Protocol&#xff0…...

【紧急预警】Lindy衰减临界点已提前至第8.3个月!2024最新《营销自动化寿命健康度白皮书》限时开放前500份

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Lindy衰减临界点的理论重构与实证突破 Lindy效应传统上描述“越老越长寿”的非线性生存规律&#xff0c;但其在现代软件系统、开源生态与协议层技术栈中的适用边界正遭遇结构性挑战。本文首次将Lindy模型从静…...

defx.nvim 安装与配置完全教程:从零开始搭建高效文件管理系统 [特殊字符]

defx.nvim 安装与配置完全教程&#xff1a;从零开始搭建高效文件管理系统 &#x1f680; 【免费下载链接】defx.nvim :file_folder: The dark powered file explorer implementation for neovim/Vim8 项目地址: https://gitcode.com/gh_mirrors/de/defx.nvim defx.nvim …...

Unity/Unreal开发者必看:用手机和陀螺仪实验,5分钟搞懂万向节死锁(附避坑指南)

Unity/Unreal开发者实战指南&#xff1a;用手机陀螺仪5分钟破解万向节死锁当你调试第一人称视角时&#xff0c;角色突然卡在墙面无法转动&#xff1b;当无人机模型在俯冲90度时失控乱转——这些很可能都是万向节死锁(Gimbal Lock)在作祟。作为实时3D开发中最恼人的数学陷阱之一…...

CentOS 8/Stream 8系统DNF换源后,安装软件还是慢?试试这几个排查命令和优化技巧

CentOS 8/Stream 8系统DNF换源后安装缓慢的深度排查与优化指南当你已经按照教程将CentOS 8/Stream 8的DNF源切换为国内镜像&#xff0c;却发现软件安装速度依然不尽如人意时&#xff0c;这种体验确实令人沮丧。作为长期使用CentOS系统的技术专家&#xff0c;我完全理解这种&quo…...

别只盯着主控芯片!拆解STM32最小系统板:电源、时钟、复位三大支柱电路深度解析

STM32最小系统板设计进阶&#xff1a;电源、时钟与复位电路的工程实践 在嵌入式系统开发中&#xff0c;我们常常将注意力集中在主控芯片的功能实现上&#xff0c;却忽略了支撑系统稳定运行的三大基础电路——电源、时钟和复位。这些看似简单的电路模块&#xff0c;实则是整个系…...

问卷数据分析避坑指南:你的验证性因子分析(CFA)模型为什么总拟合不好?

问卷数据分析避坑指南&#xff1a;验证性因子分析&#xff08;CFA&#xff09;模型拟合不良的深度诊断 当你满怀期待地将精心设计的问卷数据导入统计软件&#xff0c;准备验证理论模型时&#xff0c;却发现拟合指标一片飘红——卡方值高得离谱&#xff0c;RMSEA超出临界值&…...

5G O-RAN网络智能运维:基于随机森林的异常检测与切换优化实战

1. 项目概述&#xff1a;当5G网络学会“未卜先知”在5G乃至未来6G网络的运维战场上&#xff0c;故障处理正经历一场从“事后救火”到“事前预警”的深刻变革。传统基于静态阈值的告警系统&#xff0c;就像在高速公路上设置固定的限速牌&#xff0c;一旦遇到雨雪、拥堵等复杂路况…...

微信4.0.3.22防撤回技术原理与安全Hook实践

1. 这不是“破解”&#xff0c;而是对微信消息机制的一次技术复盘 很多人看到标题里的“防撤回”三个字&#xff0c;第一反应是“又要搞黑产工具了&#xff1f;”——其实完全不是。我做这个分析的初衷&#xff0c;非常朴素&#xff1a;去年带一个校园小程序团队时&#xff0c;…...