在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java中BufferedReader与BufferedWriter类的使用示例

2016-12-20 13:17| 发布者: zhangjf| 查看: 557| 评论: 0

摘要: BufferedReader BufferedReader 是缓冲字符输入流。它继承于Reader。 BufferedReader 的作用是为其他字符输入流添加一些缓冲功能。 创建BufferReader时,我们会通过它的构造函数指定某个Reader为参数。BufferRea ...

BufferedReader
BufferedReader 是缓冲字符输入流。它继承于Reader。
BufferedReader 的作用是为其他字符输入流添加一些缓冲功能。
创建BufferReader时,我们会通过它的构造函数指定某个Reader为参数。BufferReader会将该Reader中的数据分批读取,每次读取一部分到缓冲中;操作完缓冲中的这部分数据之后,再从Reader中读取下一部分的数据。
为什么需要缓冲呢?原因很简单,效率问题!缓冲中的数据实际上是保存在内存中,而原始数据可能是保存在硬盘或NandFlash中;而我们知道,从内存中读取数据的速度比从硬盘读取数据的速度至少快10倍以上。
那干嘛不干脆一次性将全部数据都读取到缓冲中呢?第一,读取全部的数据所需要的时间可能会很长。第二,内存价格很贵,容量不想硬盘那么大。

示例:

  1. import java.io.BufferedReader;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.File;
  4. import java.io.InputStream;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.io.FileNotFoundException;
  8. import java.lang.SecurityException;
  9. public class BufferedReaderTest {
  10. private static final int LEN = 5;
  11. public static void main(String[] args) {
  12. testBufferedReader() ;
  13. }
  14. /**
  15. * BufferedReader的API测试函数
  16. */
  17. private static void testBufferedReader() {
  18. // 创建BufferedReader字符流,内容是ArrayLetters数组
  19. try {
  20. File file = new File("bufferedreader.txt");
  21. BufferedReader in =
  22. new BufferedReader(
  23. new FileReader(file));
  24. // 从字符流中读取5个字符。“abcde”
  25. for (int i=0; i<LEN; i++) {
  26. // 若能继续读取下一个字符,则读取下一个字符
  27. if (in.ready()) {
  28. // 读取“字符流的下一个字符”
  29. int tmp = in.read();
  30. System.out.printf("%d : %cn", i, tmp);
  31. }
  32. }
  33. // 若“该字符流”不支持标记功能,则直接退出
  34. if (!in.markSupported()) {
  35. System.out.println("make not supported!");
  36. return ;
  37. }
  38. // 标记“当前索引位置”,即标记第6个位置的元素--“f”
  39. // 1024对应marklimit
  40. in.mark(1024);
  41. // 跳过22个字符。
  42. in.skip(22);
  43. // 读取5个字符
  44. char[] buf = new char[LEN];
  45. in.read(buf, 0, LEN);
  46. System.out.printf("buf=%sn", String.valueOf(buf));
  47. // 读取该行剩余的数据
  48. System.out.printf("readLine=%sn", in.readLine());
  49. // 重置“输入流的索引”为mark()所标记的位置,即重置到“f”处。
  50. in.reset();
  51. // 从“重置后的字符流”中读取5个字符到buf中。即读取“fghij”
  52. in.read(buf, 0, LEN);
  53. System.out.printf("buf=%sn", String.valueOf(buf));
  54. in.close();
  55. } catch (FileNotFoundException e) {
  56. e.printStackTrace();
  57. } catch (SecurityException e) {
  58. e.printStackTrace();
  59. } catch (IOException e) {
  60. e.printStackTrace();
  61. }
  62. }
  63. }
复制代码

程序中读取的bufferedreader.txt的内容如下:

  1. abcdefghijklmnopqrstuvwxyz
  2. 0123456789
  3. ABCDEFGHIJKLMNOPQRSTUVWXYZ
复制代码

运行结果:

  1. 0 : a
  2. 1 : b
  3. 2 : c
  4. 3 : d
  5. 4 : e
  6. buf=01234
  7. readLine=56789
  8. buf=fghij
复制代码

BufferedWriter
BufferedWriter 是缓冲字符输出流。它继承于Writer。
BufferedWriter 的作用是为其他字符输出流添加一些缓冲功能。
BufferedWriter通过字符数组来缓冲数据,当缓冲区满或者用户调用flush()函数时,它就会将缓冲区的数据写入到输出流中。
示例:

  1. import java.io.BufferedWriter;
  2. import java.io.File;
  3. import java.io.OutputStream;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.FileNotFoundException;
  7. import java.lang.SecurityException;
  8. import java.util.Scanner;
  9. public class BufferedWriterTest {
  10. private static final int LEN = 5;
  11. // 对应英文字母“abcdefghijklmnopqrstuvwxyz”
  12. //private static final char[] ArrayLetters = "abcdefghijklmnopqrstuvwxyz";
  13. private static final char[] ArrayLetters = new char[] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  14. public static void main(String[] args) {
  15. testBufferedWriter() ;
  16. }
  17. /**
  18. * BufferedWriter的API测试函数
  19. */
  20. private static void testBufferedWriter() {
  21. // 创建“文件输出流”对应的BufferedWriter
  22. // 它对应缓冲区的大小是16,即缓冲区的数据>=16时,会自动将缓冲区的内容写入到输出流。
  23. try {
  24. File file = new File("bufferwriter.txt");
  25. BufferedWriter out =
  26. new BufferedWriter(
  27. new FileWriter(file));
  28. // 将ArrayLetters数组的前10个字符写入到输出流中
  29. out.write(ArrayLetters, 0, 10);
  30. // 将“换行符n”写入到输出流中
  31. out.write('n');
  32. out.flush();
  33. //readUserInput() ;
  34. out.close();
  35. } catch (FileNotFoundException e) {
  36. e.printStackTrace();
  37. } catch (SecurityException e) {
  38. e.printStackTrace();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. /**
  44. * 读取用户输入
  45. */
  46. private static void readUserInput() {
  47. System.out.println("please input a text:");
  48. Scanner reader=new Scanner(System.in);
  49. // 等待一个输入
  50. String str = reader.next();
  51. System.out.printf("the input is : %sn", str);
  52. }
  53. }
复制代码

运行结果: 生成文件“bufferwriter.txt”,文件的内容是“abcdefghij”。

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-8-19 02:20

Copyright 2015-2025 djqfx

返回顶部