我怎样才能寻找(改变立场)ByteArrayInputStream
(java.io
)?这是显而易见的事情,但我似乎无法在任何地方找到这种方法(mark
/reset
还不够,我需要将位置设置到InputStream
).
如果不能使用java.io
我必须切换到java.nio
并使用ByteBuffer
,我怎样才能得到类似的东西DataOutputStream
包裹一个ByteArrayOutputStream
using java.nio
?我没有找到任何类型的自动调整大小的缓冲区。
EDIT: 我找到了一种方法来实现我想要做的事情,但它有点混乱。ImageIO.createImageInputStream
创建一个ImageInputStream
,这正是我想要的(可以查找和读取原语)。然而,使用一个ByteArrayInputStream
返回一个FileCacheImageInputStream
,这基本上意味着它将字节数组复制到文件中只是为了查找。
这是我第一次尝试使用 Java IO 类,结果完全是负面的。它缺少一些基本的(IMO)功能,并且它有很多方法可以做同样的事情(例如,从文件中读取原语,您可以使用RandomAccessFile
, DataInputStream
+ FileInputStream
, FileImageInputStream
, FileChannel
+ ByteBuffer
,甚至可能更多)。
你会用reset()
/skip()
。我不能说它是世界上最好的 API,但它应该可以工作:
public void seek(ByteArrayInputStream input, int position)
throws IOException
{
input.reset();
input.skip(position);
}
当然,这是假设没有人打电话的情况下mark()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)