2016-03-11 2 views
1

Мне нужно отправить файл с телефона на свое устройство (HC-06 на борту). Но мне нужно отправить его по частям. Как я могу читать файл в байтовый массив? У меня есть собственный протокол передачи.Android | Как читать файл в байтовый массив?

+0

Возможный дубликат [Файл в байт \ [\] в Java] (https://stackoverflow.com/questions/858980/file-to-byte-in-java) – amin

ответ

1

Для того, чтобы читать File, вам лучше всего позвонить с помощью FileInputStream.

Вы создаете объект File, указывающий на ваш файл на устройстве. В качестве параметра вы открываете FileInputStream с параметром File.

Вы создаете буфер byte[]. Здесь вы прочтете свой файл, кусок куска.

Вы читаете в куске за один раз с read(buffer). Это возвращает -1, когда конец файла достигнут. В этом цикле вы должны выполнить работу над своим буфером. В вашем случае вы захотите отправить его, используя свой протокол.

Не пытайтесь прочитать весь файл сразу, иначе вы, скорее всего, получите OutOfMemoryError.

File file = new File("input.bin"); 
FileInputStream fis = null; 
try { 
    fis = new FileInputStream(file); 

    byte buffer[] = new byte[4096]; 
    int read = 0; 

    while((read = fis.read(buffer)) != -1) { 
     // Do what you want with the buffer of bytes here. 
     // Make sure you only work with bytes 0 - read. 
     // Sending it with your protocol for example. 
    } 
} catch (FileNotFoundException e) { 
    System.out.println("File not found: " + e.toString()); 
} catch (IOException e) { 
    System.out.println("Exception reading file: " + e.toString()); 
} finally { 
    try { 
     if (fis != null) { 
      fis.close(); 
     } 
    } catch (IOException ignored) { 
    } 
} 
+0

Великий ответ с кодом, например, Я попробую это так! –

0

Этот код работал для меня в проекте андроида, поэтому, надеюсь, он будет работать на вас.

byte[] fileContent = getByte(path); // call the method from there.... 


    private byte[] getByte(String path) { 
     byte[] getBytes = {}; 
     try { 
      File file = new File(path); 
      getBytes = new byte[(int) file.length()]; 
      InputStream is = new FileInputStream(file); 
      is.read(getBytes); 
      is.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return getBytes; 
    } 
Смежные вопросы