Solaris OS で Java ランタイムを使用してプロセスを作成しています。次に、プロセスから入力ストリームを取得し、入力ストリームを読み取ります。私は(プロセスについてはよくわかりません。これはサードパーティのものです)アウトストリームのプロセスは巨大であると予想していますが、切り取られているようです。プロセスがその出力ストリームにどれだけの量を含めることができるかについて、Java 側にしきい値がある可能性がありますか?
ありがとう、アブドゥル
Solaris OS で Java ランタイムを使用してプロセスを作成しています。次に、プロセスから入力ストリームを取得し、入力ストリームを読み取ります。私は(プロセスについてはよくわかりません。これはサードパーティのものです)アウトストリームのプロセスは巨大であると予想していますが、切り取られているようです。プロセスがその出力ストリームにどれだけの量を含めることができるかについて、Java 側にしきい値がある可能性がありますか?
ありがとう、アブドゥル
There is no limit to the amount of data you can read, if you read repeatedly. You cannot read more than 2 GB at once and some stream types might only give you a few KB at a time. e.g. a slow Socket will often given you 1.5 KB or less (based on the MTU of the connection)
If you call int read(byte[])
it is only guaranteed to read 1 byte. It is a common mistake to assume you will read the full buffer every time. If you need this you can use DataInputStream.readFully(byte[])
You shouldn't run into limitations on InputStream
or OutputStream
if it is properly implemented. The most likely resource to run into limitations on is memory when allocating objects either from the input or to the output - for example trying to read a 100GB file into memory to then write to an output. If you need to load very large objects into memory to or from a stream, make sure to use a 64bit JVM and allocate as much memory to it as you can, however testing is the only way to determine the ideal values.
「プロセス出力ストリーム」とは、STDOUT のことですか? 標準エラー? または、どこかに直接出力する OutputStream オブジェクトがありますか? (ファイル?)
ファイルに書き込む場合 - 出力ストリームを閉じないと、クリップされたデータが表示されることがあります。本 (書き終わったら outputstream.close() ) に従っている限り、問題ありません。ストレージ スペース (明らか) やファイル システムの制限 (ファイル サイズを制限するものもあります) など、いくつかの基本的な制限があることに注意してください。
STDOUT/STDERR に書き込む場合 - 私の知る限り、問題ありません。出力をターミナルや Eclipse (たとえば) に書き込む場合、出力が制限される可能性があることに注意してください (ただし、データの最初の部分が欠落している可能性が高く、最後の部分ではありません)。