繁体   English   中英

Java:对数据进行分块处理

[英]Java: stream processing of data which comes in chunks

给定我们有一些网络或其他进程,这些进程会分块获取所需的数据。 每个块都是字节数组。 数据的性质只是一个简单的文本文件,其中包含许多行。 我们要逐行处理此文件。 这可能吗?

一种简单的方法是等所有数据都到来,同时将所有块添加到ByteBuffer中,或者通过System.arrayCopy将它们简单地合并到一个大字节数组中。 之后,我们可以从中创建一个大String并逐行读取它,或者创建ByteArrayInputStream并在转换为InputStreamReader之后使用某些Reader对其进行读取。

可以,但是我们可以以实时流的方式进行操作,在到达时读取下一个块吗? 不能保证块由一些完整的行组成。 它可以在行的中间结束,应该对其进行处理,即在这种情况下,我们应该等待下一个块。

有没有一种方法无需等待文件结束?

这与从BufferedReader中读取并没有什么不同。 不同之处在于,由于正在处理当前块,因此BufferedReader不会在后台缓冲更多数据; 它等待直到它为空,然后调用一些read()方法。 但是,如果可以,请将BufferedReader连接到您的输入,并使事情保持简单。

如果需要并行阅读,请查看PipedInputStream / PipedOutputStream。 它们是配对的,其想法是让一个线程将其从流读取的数据写入PipedOutputStream,然后另一个线程从PipedInputStream读取。

或者,您可以使用非阻塞IO,但这需要保存处理上下文,以便以后可以恢复它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM