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 .
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.