使用java.io寻找ByteArrayInputStream

asd*_*jkl 10 java io nio stream

我如何寻找(改变位置)a ByteArrayInputStream(java.io)?它是如此明显的东西,但我似乎无法在任何地方找到一个方法(mark/ reset是不够的,我需要将位置设置到任何地方InputStream).

如果它无法使用java.io并且我必须切换到java.nio并使用a ByteBuffer,我怎么能得到类似于DataOutputStream包装ByteArrayOutputStream使用的东西java.nio?我没有找到任何类型的可自动调整大小的缓冲区.

编辑:我找到了一种方法来实现我正在尝试做的事情,但它有点凌乱.ImageIO.createImageInputStream创建一个ImageInputStream,这正是我想要的(可以搜索和读取基元).但是,使用ByteArrayInputStream返回a FileCacheImageInputStream,这基本上意味着它将字节数组复制到文件中以便进行搜索.

这是我第一次尝试使用Java IO类,但它完全是否定的.它缺少一些基本的(IMO)的特点,而且它有很多方法可以做同样的事情(例如,从文件中您可以使用读取元RandomAccessFile,DataInputStream+ FileInputStream,FileImageInputStream,FileChannel+ ByteBuffer,也许甚至更多).

Jon*_*eet 10

你用reset()/ skip().我不能说它是世界上最好的API,但它应该工作:

public void seek(ByteArrayInputStream input, int position)
    throws IOException
{
    input.reset();
    input.skip(position);
}
Run Code Online (Sandbox Code Playgroud)

当然,这假设没有人打过电话mark().


eri*_*son 5

如果您要创建ByteArrayInputStream要传递到其他地方的,请扩展类并根据需要进行操作pos(的protected成员ByteArrayInputStream)。