2015-09-29 11 views
5

skip(long)メソッドがFileInputStreamの場合、ファイルの開始位置からバイトをスキップし、ファイルポインタを配置します。しかし、ファイルの途中で20文字だけをスキップしたい場合は、ファイルの残りの部分を読み込むためには、どうすればよいですか?IO javaのSkip()メソッド?

+0

'skip'は現在のファイル位置から機能します。テキストの場合、リーダーを使用します(InputStreamReaderはバイナリー・バイトをUnicode javaテキストに橋渡しします)。バッファリングするには、Buffered〜バージョンを使用します。 –

答えて

7

BufferedReaderを使用してください。そのskipメソッドは文字をスキップし、バイトはスキップしません。カウンターをMantain

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、面白い –

+5

@QuanNguyen - ストリームはバイトで動作し、読者/ライターは文字で動作することを忘れないでください。* – TheLostMind

+0

'BufferedReader.skip()'でさえも、 [BMP](https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane)の外に文字があります。 – Phylogenesis

2

:既存FileInputStreamから20文字をスキップする

各読み取りごとにカウンタを増加させるすべての文字をループします。スキップする文字の先頭に対応するカウンタの制限に達すると、スキップする必要のある文字はスキップされます。

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

必要が使用している場合Tunakiが言ったように(またはBufferedInputStreamバイナリまたはテキストファイル場合、あなたが読んでいるファイルの種類に応じて)パフォーマンスを向上させるためにBufferedReader