java基础第十七天 io缓冲流

1、缓冲流

缓冲流:就是套在文件流之上的缓冲流
特点:能够提高程序读写的效率

字节缓冲流:BufferedInputStream,BufferedOutputStream
字符缓冲流:BufferedReader,BufferedWriter

注意:输出的时候,需要调用flush()方法,将缓冲区的数据刷新到磁盘

1.1. 字节缓冲流

1、字节缓冲流:输入流BufferedInputStream

BufferedInputStream(InputStream in) 
         创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。 
BufferedInputStream(InputStream in, int size) 
          创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。 

案例:

    BufferedInputStream in = new BufferedInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\IO05.java"));
    int r =0;
    byte[] b = new byte[4096];
    while((r=in.read(b)) != -1){
        System.out.println(new String(b,0,r));
    }

2.字节缓冲流:输出流BufferedOutputStream

BufferedOutputStream(OutputStream out) 
         创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 
BufferedOutputStream(OutputStream out, int size) 
         创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。 

案例:

    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt"));
    out.write("战狼2最近很火,但是我没有时间看!".getBytes());

    //注意flush操作,才能把数据写到磁盘
    out.flush();
    out.close();

2.1. 字符缓冲流

1.字符缓冲输入流:BufferedReader

 BufferedReader(Reader in) 
           创建一个使用默认大小输入缓冲区的缓冲字符输入流。 
 BufferedReader(Reader in, int sz) 
          创建一个使用指定大小输入缓冲区的缓冲字符输入流。 

这是字符缓冲流特有的方法

  String readLine() 
           读取一个文本行。 

案例:

    BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\IO05.java"));

    //按一个字符读
    int len=0;
    while((len=br.read()) != -1){
        System.out.print((char)len);
    }

    br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\IO05.java"));
    System.out.println("=================================");
    //按缓冲区读
    len=0;
    char[] c = new char[1024];
    while((len=br.read(c)) != -1){
        System.out.print(new String(c,0,len));
    }

    //按行读
    br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\IO05.java"));
    System.out.println("=================================");
    //按缓冲区读
    String line=null;
    while((line=br.readLine()) != null){
        System.out.println(line);
    }

2.字符缓冲输出流:BufferedWriter

BufferedWriter(Writer out) 
         创建一个使用默认大小输出缓冲区的缓冲字符输出流。 
BufferedWriter(Writer out, int sz) 
         创建一个使用给定大小输出缓冲区的新缓冲字符输出流。 

BufferedWriter特有的方法,不过可以使用\r\n替换

newLine() 
         写入一个行分隔符。

案例:

    BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt"));
    bw.write("创建一个使用默认大小输出缓冲区的缓冲字符输出流。  ");
    bw.newLine();
    bw.write("创建一个使用给定大小输出缓冲区的新缓冲字符输出流。 ");
    bw.flush();
    bw.close();

2、转换流

转换流:就是把字节流转化成字符流

java提供两个转换流:

    字节流转字符流(输入) InputStreamReader
    字节流转字符流(输出) OutputStreamWriter

为什么提供这样的转换流:
字节流中的数据都是字符时,转成字符流操作更高效。

1.转换输入流:InputStreamReader

InputStreamReader(InputStream in) 
          创建一个使用默认字符集的 InputStreamReader。

InputStreamReader(InputStream in, String charsetName) 
          创建使用指定字符集的 InputStreamReader。        

案例:

    InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\Administrator\\Desktop\\IO05.java"));

    int len=0;
    char[] c = new char[1024];
    while((len=isr.read(c)) != -1){
        System.out.println(new String(c,0,len));
    }

    System.out.println("=============");
    //指定字符集
    isr = new InputStreamReader(new FileInputStream("C:\\Users\\Administrator\\Desktop\\IO05.java"),"GBK");
    len = 0;
    while ((len = isr.read(c)) != -1) {
        System.out.println(new String(c, 0, len));
    }

2.转换输出流:OutputStreamWriter

 OutputStreamWriter(OutputStream out) 
          创建使用默认字符编码的 OutputStreamWriter。

 OutputStreamWriter(OutputStream out, String charsetName) 
          创建使用指定字符集的 OutputStreamWriter。    

案例:

    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt"));

    osw.write("hello io...hello OutputStreamWriter...");
    osw.flush();

3.可以使用缓冲流在包装转换流

    BufferedReader rs = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\Administrator\\Desktop\\IO05.java")));

    //缓冲流有个特殊的方法readLine,能够按行读取
    String line = null;
    //不等于null就表示没有到结尾
    while ((line = rs.readLine()) != null) {
        System.out.println(line);
    }   

    rs.close;//可以把包装的流也关闭

3、标准输入输出流(了解)

System.in和System.out分别代表了系统标准的输入和输出

4、打印流(了解)

打印流(了解):
字节打印 PrintStream
字符打印 PrintWriter

特点:

PrintStream和PrintWriter的输出不会抛出异常
PrintStream和PrintWriter有自动flush功能
System.out返回的是PrintStream的实例

5、数据流(了解)

主要是操作Java语言的基本数据类型的数据

6、对象流

对象流:

主要用于:对象的序列化和反序列化(通俗的说就是用户对象写入IO流或从IO流读取对象)

ObjectInputStream
ObjectOutputStream

注意:要序列化到磁盘上的对象,必须实现Serializable

7、随机访问流(了解)

随机访问流:RandomAccessFile

构造器
public RandomAccessFile(File file, String mode) 
public RandomAccessFile(String name, String mode)

mode:

r: 以只读方式打开
rw:打开以便读取和写入
rwd:打开以便读取和写入;同步文件内容的更新
rws:打开以便读取和写入;同步文件内容和元数据的更新

案例:

    RandomAccessFile rf = new  RandomAccessFile("C:\\Users\\Administrator\\Desktop\\IO05.java", "r");
    rf.seek(100);
    byte [] b = new byte[1024];

    int off = 0;
    int len = 100;
    rf.read(b, off, len);

    String str = new String(b, 0, len);
    System.out.println(str);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值