BufferedReader
개체가 읽을 대상인지 확인하는 방법이 있습니까? C++ 같은 것 cin.peek()
. 감사.BufferedReader를 들여다 볼 수 있습니까?
답변
당신은 "부울 준비()"방법을 시도 할 수 있습니다. Java 6 API 문서에서 : "버퍼가 비어 있지 않거나 기본 문자 스트림이 준비되어 있으면 버퍼링 된 문자 스트림이 준비되었습니다."
BufferedReader r = new BufferedReader(reader);
if(r.ready())
{
r.read();
}
다음 코드는 스트림의 첫 번째 바이트를 살펴 봅니다. 당신을 위해 엿보기처럼 행동해야합니다.
BufferedReader bReader = new BufferedReader(inputStream);
bReader.mark(1);
int byte1 = bReader.read();
bReader.reset();
그러나 마크는 값을 반환하지 않으므로 정말로 확인할 수 없습니까? –
그런데 엿보기가 싫어서 값을 돌려주고 싶습니까? –
예 int peek()을 원합니다. 스트림에 무언가가 있다면 반환 값을 확인하여 스트림의 상태가 변경되지 않도록 해답을 얻습니다. –
BufferedReader br = new BufferedReader(reader);
br.mark(1);
int firstByte = br.read();
br.reset();
PushbackReader을 사용할 수 있습니다. 이를 사용하여 문자를 읽은 다음 읽을 수 있습니다. 이것은 본질적으로 당신이 그것을 뒤로 밀 수 있습니다.
PushbackReader pr = new PushbackReader(reader);
char c = (char)pr.read();
// do something to look at c
pr.unread((int)c); //pushes the character back into the buffer
좋은 답변입니다! 이것은 Java "peek"입니다. – Pindatjuh
참고 사항 : http://stackoverflow.com/a/9198381/59087 –
정상적인 관용구 BufferedReader#readLine()
가 null
을 반환하지 않는 경우 루프에서 확인하는 것입니다. 스트림의 끝에 도달하면 (예 : 파일 끝, 소켓 닫기 등) null
을 반환합니다.
예.
BufferedReader reader = new BufferedReader(someReaderSource);
String line = null;
while ((line = reader.readLine()) != null) {
// ...
}
당신이 다음 BufferedReader#ready()
대신 사용 (A BufferedReader
가 선택되어있는 주요 이유 그런데 인) 라인에서 읽을 수 없다 경우
BufferedReader reader = new BufferedReader(someReaderSource);
while (reader.ready()) {
int data = reader.read();
// ...
}
당신은 PushBackReader
를 사용할 수는 문자를 읽은 다음 "뒤로 밀기". 그렇게하면 전체적인 상태에 영향을주지 않고 무언가가 있다는 것을 확실히 알 수 있습니다.
준비() 메소드를 사용하는 pgmura의 답변은 간단하며 작동합니다. 그러나 그 이유는 Sun의 방법을 구현했기 때문입니다. 이는 실제로 문서에 동의하지 않습니다. 이 행동이 중요하다면 나는 그것에 의지하지 않을 것입니다. 여기를 참조하십시오. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4090471 차라리 PushbackReader 옵션을 사용하고 싶습니다.
내 솔루션은 .. BufferedReader를 확장하고 buf로 큐를 사용하면 큐에서 peek 메서드를 사용할 수 있습니다.
public class PeekBufferedReader extends BufferedReader{
private Queue<String> buf;
private int bufSize;
public PeekBufferedReader(Reader reader, int bufSize) throws IOException {
super(reader);
this.bufSize = bufSize;
buf = Queues.newArrayBlockingQueue(bufSize);
}
/**
* readAheadLimit is set to 1048576. Line which has length over readAheadLimit
* will cause IOException.
* @throws IOException
**/
//public String peekLine() throws IOException {
// super.mark(1048576);
// String peekedLine = super.readLine();
// super.reset();
// return peekedLine;
//}
/**
* This method can be implemented by mark and reset methods. But performance of
* this implementation is better (about 2times) than using mark and reset
**/
public String peekLine() throws IOException {
if (buf.isEmpty()) {
while (buf.size() < bufSize) {
String readLine = super.readLine();
if (readLine == null) {
break;
} else {
buf.add(readLine);
}
}
} else {
return buf.peek();
}
if (buf.isEmpty()) {
return null;
} else {
return buf.peek();
}
}
public String readLine() throws IOException {
if (buf.isEmpty()) {
while (buf.size() < bufSize) {
String readLine = super.readLine();
if (readLine == null) {
break;
} else {
buf.add(readLine);
}
}
} else {
return buf.poll();
}
if (buf.isEmpty()) {
return null;
} else {
return buf.poll();
}
}
public boolean isEmpty() throws IOException {
if (buf.isEmpty()) {
while (buf.size() < bufSize) {
String readLine = super.readLine();
if (readLine == null) {
break;
} else {
buf.add(readLine);
}
}
} else {
return false;
}
if (buf.isEmpty()) {
return true;
} else {
return false;
}
}
}
- 1. urllib2 응답의 데이터를 들여다 볼 수 있습니까?
- 2. NServiceBus 메시지를 처리하는 동안 입력 대기열을 들여다 볼 수 있습니까?
- 3. 예외가 발생하지 않고 빈 MSMQ를 들여다 볼 수 있습니까?
- 4. 다른 Oracle 세션을 들여다 볼 수있는 방법이 있습니까?
- 5. 부분적으로 추측 된 타이핑 정보를 들여다 볼 수 있습니까? 컴파일하지 않는 프로그램을위한 Ocaml 최상위/컴파일러에서?
- 6. Java에서 BufferedReader를 지우는 방법
- 7. FileReader와 BufferedReader를 close()해야합니까?
- 8. 설명서를 볼 수 있습니까?
- 9. 로컬 더비 데이터베이스 (폴더)를 들여다 볼 수있는 ij 이외의 도구가 있습니까?
- 10. 어떻게 장면을 볼 수 있습니까?
- 11. 성능 향상을 볼 수 있습니까?
- 12. 모델은 뷰를 볼 수 있습니까?
- 13. SSMS에서 이미지를 볼 수 있습니까?
- 14. 인터페이스의 메서드를 볼 때 "최종"C# 코드를 볼 수 있습니까?
- 15. 인증서를 볼 때 subjectAltName 옵션을 볼 수 있습니까?
- 16. 실행 취소 스택을 볼 수있는 방법이 있습니까?
- 17. onBecomes clickless pagination을위한 Javascript에서 볼 수 있습니까?
- 18. DDL 트리거가 이전 상태를 볼 수 있습니까?
- 19. jMeter에서 페이지 오류를 어떻게 볼 수 있습니까?
- 20. MySql Fulltext Indexes는 어떻게 볼 수 있습니까?
- 21. Assembly.GetExportedTypes()에서 내부 유형을 볼 수 있습니까?
- 22. DataGridView에서 열 이름 값을 볼 수 있습니까?
- 23. 로그인의 기본 데이터베이스는 어떻게 볼 수 있습니까?
- 24. 파이썬의 사전은 C++에서지도로 볼 수 있습니까
- 25. memcached에 무엇이 있는지 볼 수 있습니까?
- 26. 피들러에서 파일의 내용을 어떻게 볼 수 있습니까?
- 27. 어떻게 이클립스에서 gdb 추적을 볼 수 있습니까?
- 28. git에서 들어오는 커밋을 어떻게 볼 수 있습니까?
- 29. 위성 조립품의 내용을 볼 수 있습니까?
- 30. 레이블이있는 TFS 파일 기록을 볼 수 있습니까?
나는 C++의 엿보기와 자바의 엿보기에 모호한 점이 있습니다. "읽을 내용이 있는지 확인하십시오"Java에서 "peek"과 일치하지 않습니다. – BalusC