その内容を変更してinputStreamを再利用する方法はありますか? (新しい声明なし)。
たとえば、要件に非常に近いものがありましたが、十分ではありません
次のコードでは、SequenceInputStreamを使用していて、そのシーケンスに新しいInputStreamを追加するたびに使用しています。
しかし、私は同じInputStreamを使用して同じことをしたいと思います(私はInputStreamの実装が気にしません)。
私はmark()/ reset()APIについて考えましたが、まだ読み込むコンテンツを変更する必要があります。新しいのInputStreamの作品を避けるためにJava I/O - 再利用InputStreamオブジェクト
アイデアがあるため、パフォーマンスの問題
//Input Streams
List<InputStream> inputStreams = new ArrayList<InputStream>();
try{
//First InputStream
byte[] input = new byte[]{24,8,102,97};
inputStreams.add(new ByteArrayInputStream(input));
Enumeration<InputStream> enu = Collections.enumeration(inputStreams);
SequenceInputStream is = new SequenceInputStream(enu);
byte [] out = new byte[input.length];
is.read(out);
for (byte b : out){
System.out.println(b);//Will print 24,8,102,97
}
//Second InputStream
input = new byte[]{ 4,66};
inputStreams.add(new ByteArrayInputStream(input));
out = new byte[input.length];
is.read(out);
for (byte b : out){
System.out.println(b);//will print 4,66
}
is.close();
}catch (Exception e){//
}
「ベクター」!私たちは21世紀です! –
'Vector'の代わりに' ArrayList'を考えれば、あなたはパフォーマンスで勝つでしょう – Andrew
@AndrewTobilkoあなたはそれについて確かですか? https://en.wikipedia.org/wiki/Java_performance#Escape_analysis_and_lock_coarseningは、特にJava 6以降で必要な場合を除き、「Vector」ロックの例を挙げています。もちろん、それはロックが不要であることを検出するエスケープ解析に依存しています。 'ArrayList'を使うことは、(明示的に行われていない限り)ロックが一切行われないことを意味します。 –