【java】java预备知识--流的有关用法

1.写在前面

这篇文章最多只能算是一点笔记,持续更新,而且有一些细枝末节的地方可能注意不到,仅限于应用,会长期进行更新,还望大佬能指点一二

这里顺便整理一下会遇到的点:

1.关于read函数,这个函数有多个重载,这里列出两个
(1)int n=read();没有参数,一次读取一个字节or字符,返回的n要么是读出的东西,要么为-1代表读不到了
(2)int n=read(byte[] arr);会把读入的东西塞进数组里面,返回n为读出有效数字的个数
2.关于file流的第二参数
文件输出流输入节点流,第二个参数append,代表是否选择附加
如果为false,代表的是覆写

 

2.关于流的分类

不同的维度有不同的分类方法,比如分成字节流(一次传递8bit)字符流(一次传递一个字符),或者是最常见的分类方法:节点流和处理流

(1)关于节点流:

1.节点流的基础:四个基本抽象类

字节流字符流
输入InputStreamReader
输出OutputStreamWriter

这四个是抽象类,所有流都是从这四个实现的,字节流顾名思义,传递的是八个bit的子杰,字符流传递的是字符。其中字节流可以传递一切东西,而非文本文件最好不要用字符流,因为容易造成读出结果紊乱

2.节点流的实体类:

其实是四个抽象类的具体实现,都已经封装在io这个包里面了,可以完成最基础的,对于载体的读写操作

文件操作流FileInputStreamFileOutputStream

文件操作流的具体操作载体就是文件,具体使用方法如下哦

 BufferedInputStream b = new BufferedInputStream(new FileInputStream(f));
        BufferedOutputStream o=new BufferedOutputStream(new FileOutputStream("src/文件2.jpg",false));
       
        int n=b.read();
        while(n!=-1){
            o.write(n);
            n=b.read();
        }
        b.close();
        o.close();

//文件复制操作

再举一个例子,我们平时用到的system对于io的支持,实际上也是一种载体为键盘,控制台的字节输入流

System也是字节流System.in()System.out()

(2)关于处理流

如果说节点流的具体实现是确定了何种载体和传输格式,

处理流就是对传进来和传出去的数据形式(比如数据类型)进行调整

关于最常见的缓冲流

输入输出
字节BufferedInputStreamBufferedOutputStream
字符BufferedReaderBufferedWriter

作用就是一次读取大量数据(类似缓冲数组),节约了很大的效率

还有常见的转换流,在输入的时候把字节流转化为字符流,在输出的时候把字符流转化为字节流

总之读入的时候是字节,然后内部处理的时候是个字符

转换InputStreamReaderOutputStreamWriter

 

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

数据流,用来传递基本数据类型和字符串

数据DataInputStream

DataOutputstream

DataOutputStream dp=new DataOutputStream(new FileOutputStream("src/测试.txt"));
        dp.writeInt(114514);
DataInputStream dp=new DataInputStream(new FileInputStream("src/测试.txt"));
        System.out.println(dp.readInt());

对象流:用来传递对象,这个接收的时候有点麻烦,可能还需要反序列化的知识在里面

对象ObjectInputStream

ObjectOutputstream

ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream("src/测试.txt"));
        os.writeObject(new Integer(13));

 ObjectInputStream os=new ObjectInputStream(new FileInputStream("src/测试.txt"));
        System.out.println(os.readObject());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值