java读取文件
看到有人用 IOUtils.readLines(xxxx) 来进行文件的读取,有点陌生,-_-
要做的事情是按行读取一个很大的文件,然后每一行的数据用户进行一次rpc调用查询,查询的结果再保存到另一个文件中。
1. IOUtils 是 apcahe提供的 io操作包中 下的一个类
// 原来做的事情就是将 按行读取文件,然后保存到List中
1 public static List<String> readLines(final Reader input) throws IOException { 2 final BufferedReader reader = toBufferedReader(input); 3 final List<String> list = new ArrayList<>(); 4 String line = reader.readLine(); 5 while (line != null) { 6 list.add(line); 7 line = reader.readLine(); 8 } 9 return list; 10 }
按行读取完后,可以通过 stream 来进行后面的处理。
2. xxxReader 和 xxxStream 的区别?
BufferedReader bufferedReader = new BufferedReader(new FileReader(sourcePath));
String str = bufferedReader.readLine()
BufferedReader 中 聚合 了一个 Reader 变量.
FileReader 继承 InputStreamReader. 继承 Reader
InputStream 中 聚合了一个 StreamDecoder 类型的对象, 该对象的创建需要传入一个 InputStream 类型的对象, 在 FileReader的创建中,构造函数中创建了一个 FileInputStream类型的对象。
通过 xxxReader 来读取文件,内部都是通过聚合的 xxxInputStream来进行读取的。
xxxStream 是一个byte 一个 byte 的来进行读取, 也可以一次读取多个字节
xxxReader 通常是一次读取多个字节,然后缓存到一个byte数组中,再进行后面的操作。如 readLine
3. BufferedReader
public class BufferedReader extends Reader { private Reader in; // private char cb[]; // private int nChars, nextChar; private static final int INVALIDATED = -2; private static final int UNMARKED = -1; private int markedChar = UNMARKED; private int readAheadLimit = 0; /* Valid only when markedChar > 0 */ /** If the next character is a line feed, skip it */ private boolean skipLF = false; /** The skipLF flag when the mark was set */ private boolean markedSkipLF = false; private static int defaultCharBufferSize = 8192; private static int defaultExpectedLineLength = 80; /** * Creates a buffering character-input stream that uses an input buffer of * the specified size. * * @param in A Reader * @param sz Input-buffer size * * @exception IllegalArgumentException If {@code sz <= 0} */ public BufferedReader(Reader in, int sz) { super(in); if (sz <= 0) throw new IllegalArgumentException("Buffer size <= 0"); this.in = in; cb = new char[sz]; // 缓存数组 nextChar = nChars = 0; } /** * Creates a buffering character-input stream that uses a default-sized * input buffer. * * @param in A Reader */ public BufferedReader(Reader in) { this(in, defaultCharBufferSize); }
----
也许会有遗憾,但是不应该在失败之前
浙公网安备 33010602011771号