есть в любом случае, чтобы повторно использовать inputStream, изменив его содержимое? (Без нового утверждения).
Например, я был в состоянии что-то очень близко к моему требованию, но не достаточно
В следующем коде я использую SequenceInputStream, и каждый раз, когда я добавляю новую InputStream в этой последовательности.
Но я хотел бы сделать то же самое, используя тот же входной поток (мне все равно, какая реализация InputStream).
Я думал о API-интерфейсах mark()/reset(), но мне все равно нужно изменить содержимое для чтения.Java I/O - Повторное использование объекта InputStream
Идея, чтобы избежать новых 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 веке! –
считать 'ArrayList' вместо' Vector', вы выиграете на производительности – Andrew
@AndrewTobilko вы в этом уверены? https://en.wikipedia.org/wiki/Java_performance#Escape_analysis_and_lock_coarsening специально ссылается на пример «Вектор», который не блокируется, если это необходимо в Java 6+. Конечно, это зависит от анализа побега, обнаруживающего, что блокировка не нужна; использование 'ArrayList' означает, что никакая блокировка никогда не выполняется (если только не сделано явно), поэтому у вас больше контроля над производительностью. –