readallbytes getbytes example convert bytes array archivo java memory stream seek

getbytes - java fileoutputstream to bytes



Memory Stream en Java (4)

¿Necesita soportar los flujos de entrada y salida? Si no, simplemente usaría un ByteBuffer que le permite leer / escribir tipos primitivos en ubicaciones aleatorias. (Hasta 2 GB)

Puede compartir un ByteBuffer entre un lector y un escritor.

p.ej

// 1 GB of virtual memory outside the heap. ByteBuffer writer = ByteBuffer.allocateDirect(1024*1024*1024); ByteBuffer reader = writer.slice();

Puede compartir memoria entre subprocesos (por ejemplo, Intercambiador) y procesos (usando archivos mapeados en memoria)

Estoy buscando una implementación de flujo de memoria en Java. La implementación se debe modelar aproximadamente después de la implementación de la corriente de memoria .NET (*).

Básicamente, me gustaría tener una clase MemoryStream que tenga métodos de fábrica:

class MemoryStream { MemoryInput createInput(); MemoryOutput createOutput(); } class MemoryInput extends InputStream { long position(); void seek(long pos); } class MemoryOutput extends OutputStream { long position(); void seek(long pos); }

Entonces, una vez que tenga una instancia de la clase MemoryStream , debería ser capaz de crear flujos de entrada y salida al mismo tiempo, lo que también debería permitir el posicionamiento en cualquier dirección. La secuencia de memoria no necesita ser circular, debería funcionar bien para tamaños pequeños y crecer automáticamente. La secuencia de memoria solo necesita estar confinada en un solo proceso.

¿Hay algún código disponible?

(*) .NET Memory Stream
http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx


Puedes usar PipedInputStream y PipedOutputStream

Me gusta esto:

PipedOutputStream outstr = new PipedOutputStream(); PipedInputStream instr = new PipedInputStream(outstr);

eso no le permitirá buscar directamente, pero le permite omitir tantos bytes como desee de la secuencia de entrada.

Tenga en cuenta que cada vez que escribe en outstr está bloqueado hasta que se lea todo en intr (es decir: si recuerdo correctamente las secuencias no almacenan en búfer, pero puede decorarlas con un BufferedInputStream, entonces no tiene que molestarse .


NIO permite transferir datos directamente dentro de la memoria del kernel; no estoy seguro de si se solapa exactamente con la corriente de memoria de .NET. Here''s un ejemplo simple de mapear un archivo completo en la memoria para leer.


ByteArrayInputStream y ByteArrayOutputStream es lo que estás buscando.

Estas son implementaciones de las interfaces InputStream y OutputStream que leen y escriben en una matriz de bytes en la memoria. Para ByteArrayOutputStream , la matriz crecerá automáticamente a medida que escribe datos en la secuencia.