içeriğini değiştirerek bir inputStream'i yeniden kullanmak için zaten var mı? (Yeni ifade olmadan). Örneğin
, çok benim yakın gereksinim, ama SequenceInputStream kullanıyorum Aşağıdaki kodda
yeterli değil ve her şey o dizisine yeni bir InputStream ekliyorum şey başardı.
Ancak aynı inputStream (InputStream uygulamasının hangisi olduğu umurumda değil) kullanarak aynı şeyi yapmak istiyorum.
Mark()/reset() API'lerini düşündüm, ancak okunacak içeriği değiştirmem gerekiyor.Java I/O - InputStream Nesnesini Yeniden Kullan
yeni inputStream kreasyonlarını önlemek için bir fikir çünkü tek yönlü olarak, yani olduğu gibi
//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){//
}
'Vector'! 21. yüzyıldayız! –
'Vector' yerine' ArrayList 'düşünün, bu performanstan kazanacaksınız – Andrew
@AndrewTobilko bundan emin misiniz? https://en.wikipedia.org/wiki/Java_performance#Escape_analysis_and_lock_coarsening, Java 6+ 'da gerekmedikçe kilitlenmeyen' Vector 'örneğini özellikle belirtir. Tabi ki bu, kilitlemenin gereksiz olduğunu tespit eden kaçış analizine dayanır; 'ArrayList' kullanarak, hiçbir kilitleme yapılmadığı anlamına gelir (açıkça yapılmadıkça), böylece performans üzerinde daha fazla kontrole sahip olursunuz. –