2012-10-24 43 views
0

我在solaris OS上创建一个使用java运行时的进程。然后我从流程中获得输入流并对输入流进行读取。我期望(我不太清楚这个过程是什么,它是第三方的事情),这个过程非常庞大,但似乎被削减了。难道在Java方面有一个门槛,它的输出流中有多少进程?使用java时是否对流程输入流有限制?

感谢, 阿卜杜勒

+1

试试先:) –

+0

是的,应该没有问题试图启动命令行的过程,比较输出到您在Java收到一个。 – rolve

回答

1

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

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

+0

DataInputStream.readFully函数的文件大小是否有任何限制? – Aavik

+0

@Aavik该文件需要至少具有字节[]的长度,但尚未读取,否则会抛出IOException。否则它可以是任何大小。 –

0

如果执行得当,您不应该受到InputStreamOutputStream的限制。当从输入或输出中分配对象时,最有可能遇到限制的资源是内存 - 例如尝试将100GB文件读入内存然后写入输出。如果你需要非常大的对象加载到内存中或从流,确保使用64位JVM和你可以分配尽可能多的内存吧,但是测试是确定理想值的唯一途径。

+0

你是对的,我试着更新我的答案,使其更清楚。我打算说,如果您正在分配非常大的对象来写入'OutputStream',则可能会遇到内存问题,而不是流的实际限制。 – doublesharp

0

通过“工艺输出流”你的意思是标准输出? STDERR?或者你有一个你指向某处的OutputStream对象? (文件?)

如果你写一个文件 - 你可能会看到截取的数据,如果你不关闭输出流。只要你完成书(outputstream.close()),你就可以完成了。请注意,存在一些潜在的限制,如存储空间(明显)或文件系统限制(一些限制文件大小)。

如果您写信给STDOUT/STDERR - 据我所知,你的罚款。再请注意,如果你写你的输出到终端,或者通过Eclipse的(例如),那么他们可能有一个缓冲,因此限制了你的输出(但后来,它最有可能,你会得到的数据丢失的第一部分和而不是最后一部分)。