How can I seek (change the position) of a ByteArrayInputStream
(java.io
)? It is something so obvious, but I can't seem to find a method for this anywhere (mark
/reset
is not enough, I need to set the position to anywhere on the InputStream
).
If it can't be done using java.io
and I must switch to java.nio
and use a ByteBuffer
, how can I get something similar to a DataOutputStream
wrapping a ByteArrayOutputStream
using java.nio
? I'm not finding any kind of auto-resizable buffer.
EDIT: I've found one way to achieve what I'm attempting to do, but it's a bit messy. ImageIO.createImageInputStream
creates a ImageInputStream
, which is exactly what I want (can seek and read primitives). However, using a ByteArrayInputStream
returns a FileCacheImageInputStream
, which basically means it copies the byte array to a file just to seek.
This is my first time trying to use the Java IO classes and it has been completely negative. It's missing some fundamental (IMO) features, and it has lots of ways to do the same thing (e.g. to read primitives from a file you can either use RandomAccessFile
, DataInputStream
+ FileInputStream
, FileImageInputStream
, FileChannel
+ ByteBuffer
, and maybe even more).