0

我在 solaris 操作系统上使用 java 运行时创建一个进程。然后我从进程中获取输入流并读取输入流。我希望(我不太确定这个过程,它是第 3 方的事情)这个过程外流会很大,但它似乎被剪裁了。java 端是否存在关于进程在其输出流中可以拥有多少的阈值?

谢谢, 阿卜杜勒

4

3 回答 3

1

如果您反复阅读,则可以阅读的数据量没有限制。您一次不能读取超过 2 GB 的数据,并且某些流类型可能一次只能为您提供几 KB。例如,慢速 Socket 通常会给你 1.5 KB 或更少(基于连接的 MTU)

如果您调用int read(byte[])它,则只能保证读取 1 个字节。假设您每次都会读取完整的缓冲区是一个常见的错误。如果你需要这个,你可以使用DataInputStream.readFully(byte[])

于 2012-10-24T17:50:36.560 回答
0

您不应该遇到限制InputStreamOutputStream是否正确实施。当从输入或输出分配对象时,最有可能遇到限制的资源是内存——例如,尝试将 100GB 文件读入内存然后写入输出。如果您需要将非常大的对象加载到内存中或从流中加载,请确保使用 64 位 JVM 并为其分配尽可能多的内存,但是测试是确定理想值的唯一方法。

于 2012-10-24T17:50:43.083 回答
0

“处理输出流”是指 STDOUT 吗?标准错误?或者您有一个指向某处的 OutputStream 对象?(一份文件?)

如果您写入文件 - 如果您不关闭输出流,您可能会看到剪辑数据。只要您按书阅读(完成写作后的 outputstream.close() ),您就可以开始了。请注意,存在一些潜在限制,例如存储空间(明显)或文件系统限制(一些限制文件大小)。

如果你写信给 STDOUT/STDERR - 据我所知你很好。再次注意,如果您将输出写入终端,或者通过 Eclipse(例如),那么它们可能有一个缓冲区,因此会限制您的输出(但是,您很可能会丢失数据的第一部分并且不是它的最后一部分)。

于 2012-10-24T17:54:39.370 回答