FileReader主要用于读取,读取方式的不同也必然导致效率的不同。 1. 读取单个字符:读取单个字符,在字符可用、发生I/O错误或者已到达流的末尾前,此方法一直阻塞。返回值为读取到的字符数,如果已到达流的末尾,则返回-1. 2. 读取字符数组:将读取到的字符存储到字符数组里面,并且返回字符数组的长度。如果到达流的末尾,返回-1. 1. import java.io.FileNotFoundException; 2. import java.io.FileReader; 3. import java.io.IOException; 4. 5. public class FileReaderTest { 6. 7. public static void main(String[] args) throws IOException { 8. // TODO Auto-generated method stub 9. FileReader fr = new FileReader("IO流.txt"); 10. 11. //演示读取单个字符 12. long time = System.currentTimeMillis(); 13. readChar(fr); 14. long timereadChar = System.currentTimeMillis(); 15. 16. System.out.println("time Read char is = " + (timereadChar-time)); 17. //演示读取字符到缓冲区中。 18. 19. long time2 = System.currentTimeMillis(); 20. readToBuf(fr); 21. long timeReadBuf = System.currentTimeMillis(); 22. System.out.println("time Read to Buf is = " + (timeReadBuf-time2)); 23. 24. 25. } 26. private static void readToBuf(FileReader fr) throws IOException { 27. //定义一个字符缓冲区,用于存放读到的字符。 28. char[] buf = new char[50]; 29. //设刚开始读到的字符为0 30. int len = 0 ; 31. //一直循环读取字符到缓冲区中,直到读到流的末尾。 32. while((len = fr.read(buf)) != -1){ 33. //将每次读满的缓冲区中的字符,变成字符串打印出来。 34. System.out.println(new String(buf , 0 , len)); 35. } 36. } 37. private static void readChar(FileReader fr) throws IOException { 38. //设每个读取到的字符整数值为ch. 39. int ch = 0; 40. //循环读取字符,直到流的末尾 41. while((ch = fr.read()) != -1){ 42. //将读取到的字符,强制转换为 char 43. System.out.print((char) ch); 44. } 45. } 46. }
缓冲区:
流对象的read():是从目的地一次读取一个。
缓冲区的read():是通过流对象的read将一批数据读取到缓数组,然后再从数组中一次取一个,所以内存操作要比硬盘操作要高效。 在Java中,为了提高程序的效率,为我们提供了对应的类: BufferedReader和BufferedWriter。 示例三: 1. import java.io.BufferedWriter; 2. import java.io.FileWriter; 3. import java.io.IOException; 4. 5. public class BufferedWriterDemo { 6. 7. public static void main(String[] args) throws IOException { 8. 9. //创建一个流对象。 10. FileWriter fw = new FileWriter("buf.txt"); 11. 12. //为了提高效率。创建缓冲区对象,并和要被提高效率的流相关联。 13. BufferedWriter bufw = new BufferedWriter(fw); 14. 15. for(int x=0;x<4; x++){ 16. bufw.write(x+"--hahaha"); 17. //写入一个换行符。 18. bufw.newLine(); 19. //要对缓冲区进行刷新。记住:一般只要使用了缓冲区,就一定要刷新。 20. bufw.flush(); 21. } 22. 23. //关闭缓冲区。 24. bufw.close();//问:还用关闭fw.close()?不用,因为关闭缓冲区,其实就是在关闭缓冲区关联的流。 25. 26. } 27. }
示例四:
1. import java.io.BufferedReader; 2. import java.io.FileReader; 3. import java.io.IOException; 4. 5. public class BuffereReaderDemo { 6. 7. public static void main(String[] args) throws IOException { 8. 13. //创建读取流对象 和 文件相关联。 14. FileReader fr = new FileReader("Demo.txt"); 15. 16. //创建读取缓冲区对象 和 流对象关联对其进行高效 操作; 17. BufferedReader bufr = new BufferedReader(fr); 18. //简写形式: 19. //BufferedReader bufr = new BufferedReader(new FileReader("Demo.txt")); 20. 21. String line = null ; 22. while((line = bufr.readLine()) != null){ 23. System.out.println(line); 24. } 25. bufr.close(); 26. } 27. }
|