网络流和数据流

本文介绍了计算机中的流概念,包括基本类型数组如何表示流,文件流的读写操作,如字节输出流和输入流的使用,以及如何通过字符流处理文本数据。此外,文章还探讨了网络流的实现,如socket通信在服务端和客户端的应用。
摘要由CSDN通过智能技术生成

1.流的本质为基本类型数组

2.网络流和数据流都是读某个文件路径,形成编码,再解析出来

short x = arr[i]<<8+arr[i+1]        char w = (char)x

char\int\short\long都可以存视频流、音频流等

3.文件流:基本数据类型数组拼接起来

(例:C语言中

char[ ] arr 为一个文件流,char在C中为8比特,UTF-32为32位表示一个字符

arr[i]<<24+arr[i+1]<<16+arr[i+2]<<8+arr[i+3]拼接成UTF-32,在编码库中查询,将各种基本类型转化为char文件解析出来生成符号

        文件形成编码时需要在头部标注出是什么编码以及文件总大小(字节数,文件总大小的表示数一般为32位)

4.数据流转成文件操作系统有专门的方法,把byte数组变成二进制数据存下来到硬盘上,对这块数据显示为有效,文件中有这块地址,把数读出来重新变为基本数据类型编码,显示出来

5.网络流通过高低电压传输,我们接收的时候也是用基本数据类型

6.文件流:文件的存取

        ①、字节输出流(文件字节流)

 

public class FOSWriterStream {
//将数据写入文件
    public static void main(String[] args) throws IOException {
        // 使用文件名称创建流对象,构造函数中的 true 表示在原有数据末尾追加续写
        FileOutputStream fos = new FileOutputStream("fos.txt", true);

        // 1、逐个字节写出
        fos.write(97); // 97 的 ascll 码是 a
        fos.write(98); // 98 的 ascll 码是 b
        fos.write(99); // 99 的 ascll 码是 c

        // 2、写出一个换行, 换行符号转成数组写出
        fos.write("\r\n".getBytes());

        // 字符串转换为字节数组
        byte[] b = "一个优秀的废人".getBytes();
        // 3、写出字节数组数据
        fos.write(b);

        // 4、写出指定长度字节数组数据(不可超过 b 的长度,否则数组越界)
        fos.write(b, 0, b.length);

        // 关闭资源
        fos.close();
    }

}

        ②、字节输入流(文件字节流)

 

public class FISReadStream {
//将数据从文件中读出
    public static void main(String[] args) throws IOException {
        // 1、逐个读取字节
        int b;
        FileInputStream fis1 = new FileInputStream("fis.txt");
        // 循环读取
        while ((b = fis1.read())!=-1) {
            System.out.println((char)b);
        }
        // 关闭资源
        fis1.close();

        System.out.println("----华丽丽的分割线----");

        // 2、定义字节数组读取
        int length;
        FileInputStream fis2 = new FileInputStream("fis.txt");
        // 定义字节数组,作为装字节数据的容器
        byte[] bytes = new byte[1024];
        // 循环读取
        while ((length = fis2.read(bytes))!=-1) {
            // 每次读取后,把数组变成字符串打印
            System.out.println(new String(bytes, 0, length));
        }
        // 关闭资源
        fis2.close();
    }

}

        ③、复制文件

public class FileCopyStream {
//复制文件
    public static void main(String[] args) throws IOException {

        // 指定数据源
        FileInputStream fis = new FileInputStream("Java IO 流.png");
        // 指定目的地
        FileOutputStream fos = new FileOutputStream("流.png");

        // 定义数组
        byte[] b = new byte[1024];
        // 定义长度
        int len;
        // 循环读取
        while ((len = fis.read(b))!=-1) {
            // 写出数据
            fos.write(b, 0 , len);
        }

        // 关闭资源,后开先关,后开先关
        fos.close();
        fis.close();
    }

}

                ④、文件字符流

7.网络流:socket的存取

        所有网络收发都是socket。socket是一个类,专门用来收发,需要指定端口

        ①、服务端

public class server {//服务端
    public static void main(String[] args){
        //从服务端接收数据
        try{
            ServerSocket server = new ServerSocket(8089);
            Socket socket = server.accept();
            Reader reader = new InputStreamReader(socket.getInputStream());
            char[] chars = new char[1024];
            int len;
            StringBuilder builder = new StringBuilder();
            while ((len=reader.read(chars)) != -1) {
                builder.append(new String(chars, 0, len));
            }
            System.out.println("Receive from client message=: " + builder);
            reader.close();
            socket.close();
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

          ②、客户端

public class client {//客户端
    public static void main(String[] args){
        try {
            //向服务端发送数据
            Socket socket = new Socket("127.0.0.1",8089);
            Writer writer = new OutputStreamWriter(socket.getOutputStream());
            writer.write("Hello From Client");
            //它用于将缓冲区中的数据强制刷新到目标流中,确保数据已经被写入到磁盘或其他持久化设备中,并释放相应的缓冲区。
            writer.flush();
            writer.close();
            socket.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值