有没有办法通过更改其内容来重用inputStream?(不使用new语句)。
例如,我已经非常接近我的要求,但还不够。
在以下代码中,我正在使用SequenceInputStream,并且每次都向该序列添加一个新的InputStream。
但是,我希望使用相同的inputStream执行相同的操作(我不关心InputStream的哪种实现)。
我考虑了mark() / reset() API,但仍然需要更改要读取的内容。
避免创建新InputStream的想法是因为性能问题。
例如,我已经非常接近我的要求,但还不够。
在以下代码中,我正在使用SequenceInputStream,并且每次都向该序列添加一个新的InputStream。
但是,我希望使用相同的inputStream执行相同的操作(我不关心InputStream的哪种实现)。
我考虑了mark() / reset() API,但仍然需要更改要读取的内容。
避免创建新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世纪! - user5547025ArrayList
而不是Vector
,你将在性能上获得胜利。 - Andrew TobilkoVector
不会锁定除非必要的例子。当然,这依赖于逃逸分析检测到不需要锁定;使用ArrayList
意味着永远不会进行锁定(除非显式执行),因此您可以更好地控制性能。 - Andy Turner向量
太20世纪了。;) - Peter Lawrey