首页 > 编程语言 >Java实验六: Java流式编程与网络程序设计(头歌)

Java实验六: Java流式编程与网络程序设计(头歌)

时间:2024-05-27 15:23:11浏览次数:24  
标签:java DataOutputStream 流式 头歌 DataInputStream io import Java new

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

package step1;
 
 
import java.io.*;
import java.util.*;
 
public class SortArray {
 
    public static void main(String[] args) {
        /********** Begin **********/
        // 创建保存整型数据的数组(数组大小10)
        int[] data = new int[10];
 
        // 给数组赋随
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < data.length; i++) {
            data[i] = sc.nextInt();
        }
        // 将数组元素按有小到大顺序排列
        Arrays.sort(data);
 
        try {
            // 创建数据保存文件,如果文件不存在,重新创建
            File file = new File("data.txt");
            if (!file.exists()) {
                file.createNewFile();
            }
            // 创建FileOutputStream和DataOutputStream 输出流
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
 
            // 利用输出流向文件中写入数组数据
            for (int datum : data) {
                dataOutputStream.writeInt(datum);
            }
 
            // 关闭输出流
            dataOutputStream.close();
 
            // 创建FileInputStream和DataInputStream 输入流
            FileInputStream fileInputStream = new FileInputStream(file);
            DataInputStream dataInputStream = new DataInputStream(fileInputStream);
 
            // 利用输入流从文件读取数据并输出
            for (int i = 0; i < data.length; i++) {
                System.out.print(dataInputStream.readInt());
                if (i != data.length - 1) {
                    System.out.print("<");
                }
            }
            System.out.println();
            // 关闭输入流
            dataInputStream.close();
 
        } catch (IOException e) {
            // 异常处理
            System.out.println("读写发生异常");
        }
        /********** End **********/
    }
}

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

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[] a = data.toCharArray();
    /********** End **********/
 
    // 打开指定存放电报的文件,如果文件不存在,则创建
    File file = new File("data.txt");
    if (!file.exists()) {
      file.createNewFile();
    }
 
    // 循环遍历字符数组,将每个字符加密处理
    for (int i = 0; i < a.length; i++) {
      a[i] = (char)(a[i] ^ 'q');
    }
 
    // 利用字符输出流FileWriter将加密后的字符数组写入文件中
    /********** Begin **********/
    FileWriter fileWriter = new FileWriter(file);
    fileWriter.write(a, 0, a.length);
    fileWriter.flush();
    fileWriter.close();
    /********** End **********/
 
    // 利用字符输入流FileReader读取文件,将密文输出
    /********** Begin **********/
    FileReader fileReader = new FileReader(file);
    char[] buffer = new char[10];
    int x; //保存读取的数据量
    System.out.println("密文:");
    while ((x = fileReader.read(buffer)) != -1) {
      System.out.print(new String(buffer));
    }
    fileReader.close();
    /********** End **********/
 
    // 利用字符输入流FileReader读取文件,将密文转换为明文输出
    /********** Begin **********/
    FileReader in = new FileReader(file);
    System.out.println("\n明文:");
    while ((x = in.read(buffer)) != -1) {
      for (int i = 0; i < x; i++) {
        buffer[i] = (char)(buffer[i] ^ 'q');
      }
      System.out.print(new String(buffer));
    }
    in.close();
    /********** End **********/
  }
}

三、简单TCP通信

客户端程序

Client.java代码

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", 8080);
 
        /**********  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();
    }
}

服务器端程序

Server.java代码

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 {
 
    @Override
    public void run() {
        try {
            //创建服务器端ServerSocket(ss),指定端口号8000
            /********** Begin **********/
            ServerSocket ss = new ServerSocket(8080);
            /**********  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通信实现奇偶数判断

ClientPlus.java

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", 8080);
            /**********  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();
        }
    }
}

ServerPlus.java

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 {
    @Override
    public void run() {
        try {
            /********** Begin **********/
            //创建服务器端ServerSocket(ss),指定端口号8000
            ServerSocket ss = new ServerSocket(8080);
            /**********  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();
        }
    }
}

ReceiveThread.java

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;
    }
    @Override
    public 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,DataOutputStream,流式,头歌,DataInputStream,io,import,Java,new
From: https://www.cnblogs.com/whwh/p/18215594

相关文章

  • java 加载bean 2
    @RequiredArgsConstructor@Component@RequestMapping("/timeLineData")publicclassTimeLineData{ finalCustomSqlServicecustomSqlService; @Inner(false) @PostMapping("/setTimeLine") voidsetTimeLine(@RequestBodyMap<String,Obj......
  • JavaScript 控制网页行为
    UI框架Ant-Design:阿里巴巴出品,基于React的UI框架ElementUI、iview、ice:饿了么出品,基于Vue的UI框架Bootstrap:Twitter推出的一个用于前端的开源工具包AmazeUI:又叫“妹子UI”,一款HTML5跨屏前端框架1.基本使用1.1.引入JavaScript内部标签使用<script>//........
  • Java 进程 CPU 占用过高问题排查
    1.Java进程CPU占用过高问题排查1.1.运行环境1.2.定位CPU占用高的进程1.3.定位CPU占用高的线程1.4.将线程ID转换为十六进制1.5.找到线程对应的栈信息1.5.1.使用jstack1.5.2.使用jcmd1.5.3.使用arthas1.5.4.使用jattach1.Java进程CPU......
  • java —— 异常处理
    一、认识异常java中的异常大致分为三类:编译错误、逻辑错误、运行异常。其中编译错误和逻辑错误通常手动更改即可,运行异常是异常处理的主要内容。java中的异常全部继承自Exception类,其常见的子类如下:查看异常,例如:二、异常处理异常处理分为捕获异常和抛出异常,捕获异常......
  • Java EE-Spring AOP 面向切面编程
    SpringAOPhttps://www.cnblogs.com/joy99/p/10941543.html超级详细版:Chapter 6. 使用Spring进行面向切面编程(AOP)AOP原理面向切面(AspectOrientProgramming)面向切面编程,是面向对象编程(OOP)的一种补充。在Java程序自上而下处理主业务时,也会经常处理一些和主......
  • java如何创建Class对象?
    请思考一个问题:如果你想在java程序运行时获得某个类的信息,你会怎么办?首先要获得该类的Class对象,然后才可以通过Class类中的方法来获得与该Class对象相对应的类的信息。有3种方法来获得类的Class对象:1.用Class类的forName()方法。例如:Class.forName("java.lang.String");    ......
  • hdu1069java
    给你n个方块,其中每个方块具有它的长宽高(方块可以任意旋转放置),方块数量不限。现在你要堆一个高塔,上面方块的长和宽必须严格小于下面方块的长和宽。问你能堆起来的最大高度。先将方块以长和宽按从小到大排序,然后从小到大以此为底,求出最大高度。dp[i]=max(dp[j])+i.height(j.x<i.x......
  • JavaScript 中 toString 的奇妙使用
    JavaScript中的toString()方法,我们通常会一些其他类型的变量,转为字符串类型。但这里还有一些其他奇妙的用法。不同的类型调用toString()会得到不同的结果。我们来一一分析下。1.函数类型我们开发者自定义的函数,和JavaScript官方内置的函数,在调用toString时,输出是不一样......
  • Java 三大特性之封装(包含构造器,this关键字详解)
    java封装在Java中,面向对象的封装(Encapsulation)是一种将对象的属性和行为(数据和方法)包装在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式来操作该对象的方法。封装的主要目的是增强安全性和简化编程,同时使代码更易于维护和扩展。java封装的特点1.良好的封装能够减少......
  • java 三大特性之多态
    多态多态就是基于继承条件下,具有对象多态(一个人可以是儿子,可以是父亲等),行为多态(都可以跑,但跑的有快有慢)。特点1.多态存在方法重写2.多态编译看左边,运行看右边3.变量没有多态性4.多态下不能使用子类的独有功能好处多态可以使程序有良好的扩展,并可以对所有类的对象进行通......