2015-09-29 10 views
5

Ich weiß, dass skip(long) Methode FileInputStream Bytes von der Startposition der Datei überspringt und den Dateizeiger platziert. Aber wenn wir nur 20 Zeichen in der Mitte der Datei überspringen wollen, und den restlichen Teil der Datei als gelesen, was sollten wir tun?Skip() - Methode in IO Java?

+0

Überspringen funktioniert von der aktuellen Dateiposition. Verwenden Sie für Text einen Leser (InputStreamReader überbrückt binäre Bytes in Unicode-Java-Text). Verwenden Sie für die Pufferung eine Buffered ~ Version. –

Antwort

7

Sie sollten eine BufferedReader verwenden. Seine skip Methode überspringt Zeichen und nicht Bytes.

Um 20 Zeichen aus einem vorhandenen FileInputStream überspringen:

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, interessant –

+5

@QuanNguyen - Denken Sie daran, dass * Streams an Bytes arbeiten, Leser/Schreiber an Zeichen arbeiten * – TheLostMind

+0

Bedenken Sie, dass selbst 'BufferedReader.skip()' nicht unbedingt genau das tut, was Sie wollen Sie haben Zeichen außerhalb des [BMP] (https://en.wikipedia.org/wiki/Plane_ (Unicode) #Basic_Multicular_Plane). – Phylogenesis

2

einen Zähler mantain.

Schleifen Sie alle Zeichen, um den Zähler für jeden Lesevorgang zu erhöhen. Wenn Sie das Zählerlimit erreichen, das dem Beginn der zu überspringenden Zeichen entspricht, überspringen Sie die Zeichen, die Sie überspringen müssen.

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

Bei Bedarf ist ein BufferedReader Leistungen zu verbessern, wie Tunaki sagte (oder BufferedInputStream je nach Art der Datei, die Sie lesen, wenn Binär- oder Textdatei).