2011-10-27 18 views
5

Estoy usando una biblioteca de Java propietaria que guarda sus datos directamente en un java.io.File, pero necesito poder leer los datos para que se transmitan directamente. Los datos son binarios, algunos archivos multimedia.Leyendo datos de un Archivo mientras está siendo escrito en

El java.io.File se pasa como argumento para esta biblioteca, pero no conozco una forma de obtener una secuencia de salida de la misma. ¿Hay alguna manera simple de hacerlo, excepto abrir el archivo también para leer e intentar sincronizar operaciones de lectura/escritura?

Preferiblemente me gustaría omitir la escritura en la parte del sistema de archivos ya que estoy usando esto desde un applet y en este caso necesito permisos adicionales.

+1

Si pudiera pasarle un OutputStream, sería más fácil. ¿Es eso una opción? – laher

Respuesta

4

Si una parte de su programa está escribiendo en un archivo, entonces debería poder leer de ese archivo usando una secuencia normal new FileInputStream(someFile) en otro hilo, aunque esto depende del soporte del sistema operativo para dicha acción. No necesita sincronizar nada. Ahora está a merced de la secuencia de salida y con qué frecuencia la parte de escritura de su programa llama al flush(), por lo que puede haber un retraso.

Aquí hay un little test program que escribí demostrando que funciona bien. La sección de lectura simplemente está en un bucle similar a:

FileInputStream input = new FileInputStream(file); 
while (!Thread.currentThread().isInterrupted()) { 
    byte[] bytes = new byte[1024]; 
    int readN = input.read(bytes); 
    if (readN > 0) { 
     byte[] sub = ArrayUtils.subarray(bytes, 0, readN); 
     System.out.print("Read: " + Arrays.toString(sub) + "\n"); 
    } 
    Thread.sleep(100); 
} 
+0

gracias, realmente fue así de fácil – user1015922

+2

Depende del sistema operativo. Algunos no le permiten escribir en un archivo que se está leyendo ... otros tienen todo tipo de problemas o requieren modos especiales de "compartir" para poder hacerlo. Windows en particular parece odiarlo. – cHao

+0

Entonces, en Windows, ¿en la misma aplicación no puede leer sus propios archivos sin algunos modos de "compartir"? No sabía eso. – Gray

0

asumiendo que el comportamiento de escritura de archivos es intrínseco a la biblioteca, debe verificar su documentación para ver si puede evitar escribir en el sistema de archivos. En general, si desea leer un archivo en el que se está escribiendo (es decir, comportamiento de cola nix), puede usar java.io.RandomAccessFile

+0

sí, compruebe dos veces la documentación – user1015922

+0

Voy a buscar en RandomAccessFile, 10x – user1015922

Cuestiones relacionadas