Lectura de un archivo binario en una cadena

Debe ser obvio, pero no puedo entenderlo. Pasé casi un día entero por esto. Con mucho gusto compraré una cerveza a alguien que me pueda aliviar.

File file = new File(filePath); byte[] bytes = new byte[(int)file.length()]; DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath))); dataInputStream.readFully(bytes); dataInputStream.close(); return new String(bytes); 

Este es mi código. Veo que el tamaño de la matriz de bytes no está bien, pero no puedo averiguar el tamaño correcto. Además de que el contenido no es también incorrecto. Parece que sólo los caracteres de texto son correctos.

Parece que salir de los datos de un archivo binario es un verdadero dolor, estoy realmente deprimido.

Una cosa más: el contenido del archivo no es texto, puede ser cualquier cosa como una imagen, video o pdf.

Si está leyendo un archivo binario, no debería tratar de tratarlo como si fuera un texto codificado. Es inapropiado convertirlo a una cadena como esta – debe guardarlo como una matriz de bytes. Si realmente lo necesita como texto, debe usar base64 o hexadecimal para representar los datos binarios; es probable que otros enfoques pierdan datos.

Si readFully devuelve sin una excepción, eso muestra que se leen tantos datos como se solicitó, que debería ser el archivo completo. Usted ha logrado obtener los datos de un archivo binario con bastante facilidad (aunque la llamada close() debería estar en un bloque close() ) – sólo lo convierte en texto que es una mala idea.

Como Jon Skeet te dijo (y siempre deberías escuchar a alguien con 347k!), Si no es un texto, no lo guarde en una cadena y manténgalo como una matriz de bytes. Además, pruebe commons-io y utilice sus clases auxiliares.

 File file = new File(filePath); InputStream is = null; byte[] bytes = null; try{ bytes = IOUtils.toByteArray(is); }finally{ IOUtils.closeQuietly(is) } 
  • Convertir un teléfono Android en un joypad y conectarlo a la computadora a través de Wi-Fi
  • Eclipse - parseSdkContent falló el error - no reconoce archivos XML
  • ¿Cómo detectar si el usuario tiene 3G / Wifi encendido antes de hacer la conexión de la URL?
  • NFC no puede enviar datos de Android 4.0.3
  • Excepción LayoutInflater
  • Descargar imagen a través de la función Parse Cloud Code
  • Cómo enviar parámetros con archivo en android
  • ¿Cómo manejar tanto los resultados del cuadro de búsqueda rápida como las sugerencias recientes de búsqueda?
  • Java / Android Programación / EditText -> getText (). ToString ()
  • Android: ¿Por qué no puedo anular setFrame desde la vista?
  • android forma más rápida de decodificar mp3 a los datos de pcm
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.