통신 프로토콜이 제대로 정의되지 않았기 때문에 일부 클라이언트 측 코드를 수정해야합니다.Java에서 TCP 스트림을 읽는 가장 효율적인 방법
필자는 서버의 tcp 메시지가 새 행에서 종료되어 reader.readLine()을 사용하여 데이터를 읽었을 것이라고 가정했습니다.
이제는 이것이 사실이 아니며 메시지의 처음 4 자의 문자가 메시지 길이라고 말한 다음 나머지 메시지를 읽어야합니다.
이 작업을 수행하는 가장 효율적인 방법은 무엇입니까?
- 는
- 메시지의 길이는
- 메시지 길이 의 새로운 배열을 생성 무엇인지 결정 처음 4 자에서 4 char 배열을
- 읽기를 만들고 다음과 같이
내 일반적인 생각이었다
- 새 배열을 읽습니다.
char[] chars = new char[4]; int charCount = reader.read(chars); String messageLengthString = new String(chars); int messageLength = Integer.parseInt(messageLengthString); chars = new char[messageLength]; charCount = reader.read(chars); if (charCount != messageLength) { // Something went wrong... }
내가이 작업을 수행하는 방법을 알고,하지만 난하지가 채워지고 문자 버퍼에 대해 걱정할 필요가 수행 여기
은 (독자가 다른 곳에서 만든 BufferedReader로이다) 코드의 예입니다? 만약 그렇다면 어떻게해야합니까?
프로토콜은 16 비트 Java "char"또는 8 비트 C "char"를 기반으로합니까? – McDowell
다른 쪽 끝은 문자열로 읽혀지며 처음 4 자 길이가 길이입니다. 16 비트 Java Chars라고 가정합니다. 나는 서버 쪽에서 일하는 사람에게 이메일을 보내서 확인해 보겠다. –
번호는 ASCII입니까? 예를 들어, 47 문자 (84 바이트)의 길이는 16 진수 문자로 표현 된 시퀀스 "0047"로 표시됩니다 (예 : 0x0030003000340047). – unwind