2011-02-04 4 views
16


Я пытаюсь читать следующую следующую строку, не перемещая указатель, возможно ли это?Может ли BufferedReader (Java) читать следующую строку, не перемещая указатель?

BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS)); 

while ((readString = buf.readLine()) != null) { 
} 

В то время как будет читаться строка за строкой, как я хочу, но мне нужно написать следующую строку текущей строки.

возможно?

В моем файле содержатся данные запроса Http, первая строка - запрос GET,
во второй строке имя хоста, мне нужно вытащить хост перед GET, чтобы иметь возможность подключить его вместе.
Host/+ ГЭТ URL,

GET /logos/2011/family10-hp.jpg HTTP/1.1 
Host: www.google.com 
Accept-Encoding: gzip 

Спасибо.

ответ

35

Вы можете использовать mark() и reset(), чтобы отметить место в потоке, а затем вернуться к нему. Пример:

int BUFFER_SIZE = 1000; 

buf.mark(BUFFER_SIZE); 
buf.readLine(); // returns the GET 
buf.readLine(); // returns the Host header 
buf.reset();  // rewinds the stream back to the mark 
buf.readLine(); // returns the GET again 
+0

действительно помог Спасибо. – kimo

14

Просто прочитайте как текущую, так и следующую строку в цикле.

BufferedReader reader = null; 
try { 
    reader = new BufferedReader(new InputStreamReader(file, encoding)); 
    for (String next, line = reader.readLine(); line != null; line = next) { 
     next = reader.readLine(); 

     System.out.println("Current line: " + line); 
     System.out.println("Next line: " + next); 
    } 
} finally { 
    if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} 
}