2017-09-05 13 views
0

나는 내 생각에 매듭이 있습니다 ... 저는 int 0을 파일에 세 번 쓰고 있습니다. 시도한 \ n (0x0A) 및 \ r (0x0D)). 다시 여기에서 그것을 읽을 바이트readline은 파일에서 n 또는 r을 무시합니다. (텍스트 대 바이너리)

00 00 00 00 0D 00 00 00 00 0D 00 00 00 00 0D

에있는 파일의 내용은, 내가하는

FileInputStream is = new FileInputStream(theFile); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

그러나 포장

String s = br.readLine(); 

내 첫 번째 호출은 파일 (위치 15)보다는 내가 기대 한 것처럼 위치 (5) (즉, 0x0d로)에서 중지의 끝으로 읽습니다. 아무도 내가 어떻게 작동하는지 오해하고있는 것을 볼 수 있습니까? 감사합니다. 아래의 의견에 따라

추가 정보는 : 코드 내가이에서 얻을 출력이

input stream position: 0 
input stream position: 15 
line: 0 
line: 
line: 

입니다

public class TestApp4 { 
    public static void main(String args[]) { 
    try { 
     File theFile = new File("Test.dat"); 
     FileInputStream is = new FileInputStream(theFile); 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
     System.out.println("input stream position: " + is.getChannel().position()); 
     String s = br.readLine(); 
     byte[] bs = s.getBytes(); 
     int i = ByteBuffer.wrap(bs).getInt(); 
     System.out.println("input stream position: " + is.getChannel().position()); 
     System.out.println("line: " + i); 
     s = br.readLine(); 
     System.out.println("line: "); 
     s = br.readLine(); 
     System.out.println("line: "); 
     br.close(); 
    } catch (Throwable e) { e.printStackTrace(); } 
    } 
} 

내가 잘못 어디로 갔는지 난을 참조하십시오. 각

정확한 위치에서 깨집니다. 내 혼란은 그 라인의 끝보다는 오히려 파일의 끝에 고급

is.getChannel().position() 

고급에서 발생했다. 나는이 값이 문자열로 읽은 마지막 위치를 나타내는 것을 오해했다. 이것은 분명히 틀렸다. 큰 스트림으로 읽는 위치 인 것처럼 보입니다. 내 booboo 밖으로 정렬하는 데 도움 주셔서 감사합니다.

+0

정확히 "파일의 끝까지 읽는다는 것을 의미합니까? "? 'readLine'이 단일 라인이 아닌 완전한 String을 리턴한다는 것을 의미합니까? – Lothar

+0

줄의 끝에서 멈추지 않는다고 생각하는 이유는 무엇입니까? 왜 바이너리 데이터를 문자열로 읽으려고하는지 모르지만 방금 시도했는데 첫 번째 행만 읽습니다. 더 많은 코드를 게시하십시오. – Oleg

답변

0

InputStreamReaderBufferedReader은 둘 다 다른 작업을 수행하기 전에 내부 버퍼를 채 웁니다. 따라서 BufferedReader#readLine이라면 더 많은 데이터가 첫 번째 줄 바꿈 문자까지만 읽힐 것입니다. 두 클래스 모두 수천 바이트 (InputStreamReader)의 버퍼와 문자 (BufferedReader)로 작동하므로 처음 메서드를 호출 할 때 15 바이트 길이의 파일 끝에 도달합니다.

적어도 "파일 끝에 읽음"을 쓸 때 읽은 내용입니다. 만약 내가 잘못 추측했다면 더 정확한 질문을하십시오. (이상적으로 당신이 떠나는 일과 우리 쪽에서 해석 할 필요가 있음을 보여주는 코드로)

+0

고마워요 로타 르, 당신은 돈에 완벽했습니다. –