2015-09-29 6 views
5

Я знаю, что skip(long) метод FileInputStream пропускает байты из начальной позиции файла и помещает указатель файла. Но Если мы хотим пропустить только 20 символов в середине файла и оставшуюся часть файла для чтения, что мы должны делать?Метод Skip() в IO java?

+0

'skip' работает из текущего положения файла. Для использования текста читатель (InputStreamReader соединяет двоичные байты с java-текстом Unicode). Для буферизации используйте версию Buffered ~. –

ответ

7

Вы должны использовать BufferedReader. Его метод skip пропускает символы, а не байты.

Для перехода 20 символов из существующего FileInputStream:

BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream)); 
// read what you want here 
reader.skip(20); 
// read the rest of the file after skipping 
+0

Waooo, interesting –

+5

@QuanNguyen - как правило большого пальца, помните, что * Потоки работают над байтами, читатели/писатели работают над символами * – TheLostMind

+0

Имейте в виду, что даже 'BufferedReader.skip()' может не обязательно делать именно то, что вы хотите, если у вас есть символы вне [BMP] (https://en.wikipedia.org/wiki/Plane_ (Unicode) #Basic_Multilingual_Plane). – Phylogenesis

2

счетчика означает сохранение.

Петля всех символов, увеличивающих счетчик для каждого считывания. Когда вы достигнете предела счетчика, соответствующего началу пропущенных символов, пропустите символы, которые вам нужно пропустить.

int counter = 0; 
while (counter < START_SKIP) { 
    int x = input.read(); 
    // Do something 
} 
input.skip(NUM_CHARS_TO_SKIP); 
... 
// Continue reading the remainings chars 

При необходимости можно использовать BufferedReader, чтобы улучшить выступления, как сказал Tunaki (или BufferedInputStream в зависимости от типа файла, который вы читаете, если двоичный или текстовый файл).