2013-06-17 2 views
0

Мне нужно прочитать некоторые данные, пока файл не будет открыт в разное время, но я не уверен, что указатель на данные, которые еще не были прочитаны, автоматически увеличивается?Чтение байтов из файла?

Мой метод:

//method for copy binary data from file to binaryDataBuffer 
    void readcpy(String fileName, int pos, int len) {  
     try {            
      File lxDirectory = new File(Environment.getExternalStorageDirectory().getPath() + "/DATA/EXAMPLE/"); 

      File lxFile = new File(lxDirectory, (fileName); 

      FileInputStream mFileInputStream = new FileInputStream(lxFile); 

      mFileInputStream.read(binaryDataBuffer, pos, len); 
     } 
     catch (Exception e) { 
      Log.d("Exception", e.getMessage());    
     } 
    } 

Так что, если я называю этот метод в первый раз и читать и сохранить 5 байт, например, будет на следующем вызове метода зачитывает байт из 5 байт? Я не закрываю файл после прочтения.

+0

* Итак, если я впервые вызвал этот метод и прочитал и сохранил 5 байтов, будет ли следующий вызов метода считывать байты из 5-го байта? * Нет, он не будет (исправление, потому что я не сделал этого) t правильно прочитал вопрос). * Я не закрываю файл после чтения. * С этого момента вы ** должны ** закрыть поток после завершения работы с ним. –

+0

'Файл lxFile = new File (lxDirectory, (fileName);' Это не будет компилировать – NINCOMPOOP

+0

@TheNewIdiot может быть опечатка –

ответ

1

Когда вы создаете InputStream (потому что FileInputStream - это InputStream), поток создается заново каждый раз и начинается с начала потока (следовательно, файла).

Если вы хотите прочитать, откуда вы остановились в последний раз, вам необходимо сохранить смещение и искать - или сохранить начальный входной поток, который вы открыли.

Хотя вы можете искать в потоке (используя .skip()), он ни в коем случае НЕ рекомендуется повторно открывать каждый раз, это дорого; Кроме того, когда вы сделали с потоком, вы должны закрыть его:

// with Java 7: in automatically closed 
try (InputStream in = ...;) { 
    // do stuff 
} catch (WhateverException e) { 
    // handle exception 
} 

// with Java 6 
InputStream in = ...; 
try { 
    // do stuff 
} catch (WhateverException e) { 
    // handle exception 
} finally { 
    in.close(); 
} 
+0

Итак, что является самым элегантным способом узнать, где вы ушли? – anze87

+0

Оберните свой поток в класс и используйте этот класс для чтения – fge

+0

Не могли бы вы привести мне пример? – anze87

0

Попробуйте этот код:

public String getStringFromFile (String filePath) throws Exception {  
    File fl = new File(filePath); 
    FileInputStream fin = new FileInputStream(fl); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(fin)); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line).append("\n"); 
    } 
    String ret = sb.toString(); 

    //Make sure you close all streams. 
    fin.close(); 
    reader.close(); 

    return ret; 
} 
0

я нахожу RandomAccessFile, это смещение, которое мне нужно в моем случае.

Смежные вопросы