使用java时,进程输入流是否有限制?

时间:2012-10-24 17:46:22

标签: java process operating-system exec

我正在solaris OS上使用java运行时创建进程。然后我从进程中获取输入流并对输入流进行读取。我希望(我不太确定这个过程,这是第三方的事情)这个过程流程是巨大的,但它似乎被削减了。可能是java方面有一个关于流程在其输出流中可以有多少的阈值吗?

谢谢, 阿都

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

“过程输出流”是指STDOUT吗? STDERR?或者你有一个OutputStream对象,你指向某个地方? (一个文件?)

如果您写入文件 - 如果不关闭输出流,则可能会看到剪切的数据。只要你读完这本书(当你完成写作时输出stream.close())就可以了。请注意,存在一些潜在的限制,如存储空间(显而易见)或文件系统限制(某些限制文件大小)。

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