从多种方法读取单个InputStream

从多种方法读取单个InputStream,第1张

从多种方法读取单个InputStream

问题在于在

BufferedReader
同一对象上创建两个
Reader
。当您从中读取数据
BufferedReader
,它可能会读取比返回的数据更多的内容到其缓冲区中(因此而得名)。换句话说,即使您仅从中读取了一行
BufferedReader
InputStreamReader
可能仍从中读取了很多数据-
因此,如果您再次读取 该行
InputStreamReader
,则会丢失该数据。该数据有效地被吸
InputStreamReader

BufferedReader
,因此让出来给客户端代码的唯一方法是从阅读它
BufferedReader


换句话说,您声称:

不。fetchHeaders()仅读取包含标题的CSV的第一行。

是不正确的。它仅 使用 那么多的数据,但会 从中读取 更多数据

InputStreamReader

正如Ilya所说,您只能

BufferedReader
在原始之上创建一个
InputStreamReader
,并将其传递给这两种方法。

fetchHeaders
然后可以使用它
BufferedReader
来读取一行,然后
processContentRows
可以使用来完成所需的 *** 作
BufferedReader
-这只是
Reader
它需要知道的内容。

因此,稍微修改一下Ilya的示例:

public static void main(String[] args) {  FileInputStream fis = new FileInputStream("FileName.CSV");  BufferedInputStream bis = new BufferedInputStream(fis);  InputStreamReader isr = new InputStreamReader(bis);  BufferedReader br = new BufferedReader(isr);  processCSV(br);}private static void processCSV(BufferedReader reader) {  fetchHeaders(reader);  processContentRows(reader);}private static void fetchHeaders(BufferedReader reader) {   // Use reader.readLine() here directly... do *not* create   // another BufferedReader on top.}private static void processContentRows(Reader reader) {  // This could be declared to take a BufferedReader if you like,  // but it doesn't matter much.}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5142060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存