2014-07-25 2 views
-1

나는 간단한 서버와 클라이언트 소프트웨어를 가지고있다. 서버에서 맥에서 실행하고 C에서 작성된 내 사용자 정의 코드는 소켓에서 readline을 에뮬레이트합니다.PrintStream Println은 diff 시스템에서 다르게 동작합니까?

클라이언트가 android 및 windows 컴퓨터 용으로 Java로 작성되었습니다. Println 호출에서 이상한 동작을 관찰하고 있습니다. 이 코드는 다음과 같습니다.

PrintStream ps = new PrintStream(clientSocket.getOutputStream()); 
    JSONObject json = new JSONObject(responseMap); 
    String buffer = json.toString(); 
    ps.println(buffer); 
    ps.flush(); 

Windows에서 실행될 때 println은 버퍼 문자열 다음에/r/n을 보냅니다. android에서 실행될 때 println은 버퍼 문자열 다음에/n을 전송합니다.

println의 동작이 OS/컴퓨터 전체에서 일관성이 없어야합니까?

+2

아니요. 라인 엔딩은 플랫폼에 따라 다릅니다. –

+0

@GregS 그럼 OS 별 또는 하드웨어 별입니까? – Ahmed

+0

이것은 실제로 자바 설치와 관련이 있습니다. 그러나 실제로는 하드웨어 고유가 아닌 OS 고유의 것을 의미합니다. "라인"의 전체적인 개념은 운영체제마다 다르다. –

답변

0

println의 동작이 OS/컴퓨터 전체에서 일치하지 않아야합니까?

PrintStream은 플랫폼의 행 분리 기호를 검색하여이를 기본 스트림으로 보냅니다.

Windows와 Android는 서로 다른 행 구분 기호를 사용합니다.

0

println의 동작이 OS/컴퓨터 전체에서 일치하지 않아야합니까?

아니요. 나는 그 아이디어가 어디 있는지 알지 못합니다. 설명하는 동작은 as documented입니다.

줄 구분 기호 문자열은 시스템 속성 line.separator에 의해 정의되며 반드시 하나의 줄 바꿈 문자 ('\ n') 일 필요는 없습니다.
관련 문제