IO流--字节流

字节流

  • 字节流适合做一切文件数据的拷贝(音视频,文本)
  • 字节流不适合读取中文内容输出
  • 字符流适合做文本的操作(读和写)

  1. InputStream(抽象类)
    输入流
  • FileInputStream
    • 构造方法:FileInputStream(String name)
    • 常用方法:public abstract int read()
    • public int read(byte[] b)

public abstract int read() 从inputStream中读取一个字节,如果没有字节可读,返回-1

InputStream inputStream = new FileInputStream("E:\\java_study\\demo3\\images\\test1.txt");

        int b=0;
        while ((b = inputStream.read())!= -1){
            System.out.println((char)b);
        }

public int read(byte[] b) 一次读取b的长度的字节,返回读取字节的数量,读取的字节暂存在b中,使用String的构造方法String(byte[] bytes, int offset, int length) 解析

        InputStream inputStream = new FileInputStream("E:\\java_study\\demo3\\images\\test1.txt");

        //inputStream.readAllBytes()一次性读取全部字节

        byte[] buffer = new byte[3];
        int len;
        while ((len = inputStream.read(buffer)) != -1){
            System.out.print(new String(buffer, 0, len));
        }
  • BufferedInputStream
    • 构造器 BufferedInputStream(InputStream in)
    • 同InputStream类似,但是BufferedInputStream自带缓冲池,比较之读取速度更快
public void bufferedIOStreamTest(){
        try{
			InputStream is = new FileInputStream("E:\\java_study\\demo3\\images\\test.txt");
            InputStream in = new BufferedInputStream(is);
            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) != -1){
                System.out.print(new String(buffer, 0, len));
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }
  • ObjectInputStream(对象字节输入流)
    • 构造方法:ObjectInputStream(InputStream in)
    • 常用方法:final Object readObject()
    • 对象逆序列化:把磁盘文件中暂存的对象取出实例化为对象
public void objectInputStreamTest(){
        try(
                ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("E:\\java_study\\demo3\\images\\objectTest01.txt"));
        ) {
            Student s = (Student) objectInputStream.readObject();
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


  1. OutputStream(抽象类)
  • FileOutputStream
    • 常用构造器:FileOutputStream(String name)
    • void write(byte[] b)
    • void write(byte[] b, int off, int len)
    • void write(int b)
    public void fileOutputStreamTest() throws Exception {
        OutputStream os = new FileOutputStream("E:\\java_study\\demo3\\images\\test2.txt");//先清空之前的数据,覆盖
        OutputStream os1 = new FileOutputStream("E:\\java_study\\demo3\\images\\test2.txt",true);//追加管道,不会清除之前的数据
        //void write(int b)
        os.write(98);
        os.write('a');

        //void write(byte[] b)
        byte[] buffer1 = {'a',97,98};
        os.write(buffer1);
        byte[] buffer2 = "我爱中国!!".getBytes();
        os.write(buffer2);
        os.write("\r\n".getBytes());//换行
        //void write(byte[] b, int off, int len)
        os.write(buffer1, 0, 2);


        //刷新数据,数据才生效,流可继续使用
        os.flush();
        os.write(buffer1, 0, 2);
        //释放资源,包括刷新,关闭后流不可继续使用
        os.close();
  • BufferedOutputStream
    • 构造器:BufferedOutputStream(OutputStream out)
    • 写方法:public void write(byte[] b,int off, int len)
    • 写方法:public void write(int b)
    public void bufferedIOStreamTest() throws Exception{
        try(
                OutputStream os = new FileOutputStream("E:\\java_study\\demo3\\images\\text.txt");
                OutputStream out = new BufferedOutputStream(os);
        ) {
				out.write(98);
                byte[] buffer = {'a',97,98};
                out.write(buffer,0,buffer.length);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }
  • ObjectOutputStream(对象字节输出流)
    • 构造方法:ObjectOutputStream(OutputStream out)
    • 声明为ObjectOutputStream 对象,以便可以调用ObjectOutputStream的独特方法:writeObject(Object obj)
    • 对象序列化:以内存为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化
    • try(){}catch{}语法,使得在输出流运行完毕后自动调用close()方法,关闭流,节省空间
public void objectOutputStreamTest(){
        Student student = new Student("张三",18,"男");
        try(
                ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("E:\\java_study\\demo3\\images\\objectTest01.txt"));

        ) {
            o.writeObject(student);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • PrintStream
    • 构造方法:PrintStream(File file)
    • 构造方法:PrintStream(OutputStream out)
    • 构造方法:PrintStream(String fileName) (常用)
    • 常用方法:void print()可打印几乎所有类型数据
		PrintStream p = new PrintStream(new FileOutputStream("E:\\java_study\\demo3\\images\\test3.txt"));
        PrintStream p1 = new PrintStream("E:\\java_study\\demo3\\images\\test3.txt");
        PrintWriter pw = new PrintWriter("E:\\java_study\\demo3\\images\\test3.txt");
        p.print("lalala");
        p.flush();

应用(打印重定向)

 //打印流重定向
    public void test01() throws Exception{
        PrintStream p1 = new PrintStream("E:\\java_study\\demo3\\images\\test3.txt");
        System.setOut(p1);//把系统打印流改到自己文件
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值