zoukankan      html  css  js  c++  java
  • Java中I/O流之缓冲流

    Java 中的缓冲流:

      1. 缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法(带缓冲区的,显著减少对 IO 的读写次数,保护硬盘).

      2. J2SDK 提供了四种缓冲流,其常用构造方法如下:

        2.1 BufferedReader(Reader in) // 带缓冲区的输入流;

              BufferedReader(Reader in, int size) // 自定义缓冲区的大小;

        2.2 BufferedWriter(Writer out) // 带缓冲区的输出流;

          BufferedWriter(Writer in, int size) // 自定义缓冲区的大小;  

        2.3 BufferedInputStream(InputStream in)

          BufferedInputStream(InputStream in, int size)

        2.4 BufferedOutputStream(OutputStream out)

            BufferedOutputStream(OutputStream out, int size)

      3. 缓冲输入流支持其父类的 mark 和 reset 方法.

      4. BufferedReader 提供了 readLine 方法用于读取一行字符(以   或   分隔).

      5. BufferedWriter 提供了 newLine 用于写入一个行分隔符.

      6. 对于输出的缓冲流,写出的数据会先在内存中缓存,可以使用 flush 方法使内存中的数据立刻写出.

    Demo_1:

    import java.io.*;
    class Test {
    	public static void main(String[] args) {
    		try {
    			FileInputStream fis = new FileInputStream("E:/eclipse projiect/data.txt");
    			BufferedInputStream bis = new BufferedInputStream(fis); // 有了带缓冲区的功能
    			int c = 0;
    			System.out.println(bis.read()); // (char)bis.read
    			System.out.println(bis.read()); // (char)bis.read
    			bis.mark(100); // 将标记放到第100个字符,从第100个字符开始读;
    			for(int i=0;i<=20 && (c=bis.read())!=-1;i++){ // ASCII(1310)回车换行
    				System.out.print(c+" "); // (char)c
    			}
    			System.out.println();
    			bis.reset();
    			for(int i=0;i<=20 && (c=bis.read())!=-1;i++){
    				System.out.print(c+" "); // (char)c
    			}
    			bis.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e){
    			e.printStackTrace();
    		}
    	}
    } 
    

     运行结果:

    105
    109
    112 111 114 116 32 106 97 118 97 46 105 111 46 70 105 108 101 73 110 112 117
    112 111 114 116 32 106 97 118 97 46 105 111 46 70 105 108 101 73 110 112 117

    Demo_2:

    import java.io.*;
    class Test {
    	public static void main(String[] args) {
    		try {
    			FileReader fr = new FileReader("E:/eclipse projiect/data.txt");
    			BufferedReader br = new BufferedReader(fr);
    			FileWriter fw = new FileWriter("E:/eclipse projiect/data1.txt");
    			BufferedWriter bw = new BufferedWriter(fw);
    			String s = null;
    			for(int i=1;i<=10;i++){
    				s = String.valueOf(Math.random()); // 将随机数据转换为字符串String.valueOf
    				bw.write(s);
    				bw.newLine();
    			}
    			bw.flush();
    			while((s=br.readLine())!=null){ // 直接读一行内容
    				System.out.println(s);
    			}
    			bw.close();
    			br.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 	
    	}
    }
    

     运行结果:

    君不见,黄河之水天上来,奔流到海不复回。
    君不见,高堂明镜悲白发,朝如青丝暮成雪。
    人生得意须尽欢,莫使金樽空对月。
    天生我材必有用,千金散尽还复来。
    烹羊宰牛且为乐,会须一饮三百杯。
    岑夫子,丹丘生,将进酒,杯莫停。
    与君歌一曲,请君为我倾耳听。(倾耳听 一作:侧耳听)

    data1.txt 中的内容:

    0.39916663870104396
    0.6346803787460625
    0.7115998585645587
    0.02194201846506627
    0.9838653370130725
    0.8242365903101627
    0.8371583395463328
    0.015565811381592853
    0.04838265648243956
    0.5866850861736586

  • 相关阅读:
    ConcurrentHashMap总结
    HashMap在多线程环境下操作可能会导致程序死循环
    oracle数据库的 to char 和to date 区别(时间格式化)
    SQL中的cast()函数用法
    常见的垃圾收集器有3类-java面试一
    mybatis中sql引用
    mysql find_in_set 查询
    用Redis实现微博关注关系的分析
    C#与C++相比较之STL篇(续一)
    Vite2.0 入门
  • 原文地址:https://www.cnblogs.com/bosongokay/p/6797567.html
Copyright © 2011-2022 走看看