저는 전선을 통해 정보를 전송하기 위해 소켓 프로그래밍을 해왔습니다. DataOutputStream.writeUTF() 문제가 발생했습니다. 최대 64k의 문자열을 허용하는 것으로 보이지만이 상황을 극복 할 수있는 몇 가지 상황이 있습니다. 큰 문자열을 지원하거나 내 자신을 굴릴 필요가있는 좋은 대안이 있습니까?DataOutputStream으로 큰 문자열 작성하기
7
A
답변
15
실제로 문자 당 1, 2 또는 3 바이트로 압축하는 알고리즘을 사용하기 전에 2 바이트를 사용하여 문자열의 길이를 씁니다. (java.io.DataOutput의 문서를 참조하십시오.) UTF-8에 가깝지만 문서화되어 있긴하지만 호환성 문제가 있습니다. 쓰려는 데이터의 양에 대해 크게 걱정하지 않는다면, 먼저 문자열의 길이를 쓰고, getBytes 메소드를 사용하여 문자열의 원시 데이터를 쓰면 쉽게 작성할 수 있습니다.
// Write data
String str="foo";
byte[] data=str.getBytes("UTF-8");
out.writeInt(data.length);
out.write(data);
// Read data
int length=in.readInt();
byte[] data=new byte[length];
in.readFully(data);
String str=new String(data,"UTF-8");
2
OutputStreamWriter을 UTF-8 인코딩과 함께 사용할 수 있어야합니다. 명시 적 writeUTF 메소드는 없지만 생성자에서 charset을 설정할 수 있습니다. 시도해보십시오.
Writer osw = new OutputStreamWriter(out, "UTF-8");
여기서 out
은 현재 포장중인 OutputStream입니다.
7
ObjectOutputStream.writeObject()
은 (소스 코드를 통해 확인 된) 긴 문자열을 올바르게 처리합니다.
ObjectOutputStream oos = new ObjectOutputStream(out);
... other write operations ...
oos.writeObject(myString);
... other write operations ...
가 이런 식으로 읽기 : : 이런 식으로 문자열을 쓰기
ObjectInputStream ois = new ObjectInputStream(in);
... other read operations ...
String myString = (String) ois.readObject();
... other read operations ...
DataOutputStream
와 또 다른 차이점은 ObjectOutputStream
를 사용하여 인스턴스화 할 때 자동으로 4 바이트 스트림 헤더를 기록,하지만 일반적으로 갈 것입니다 지불 할 벌금이 아주 적다.
관련 문제
- 1. 문자열에서 데이터 (문자열) 추출 큰 문자열
- 2. 고정 길이보다 큰 문자열 생성
- 3. Java에서 큰 문자열 상수 처리
- 4. 큰 파일에서 문자열 고유성 결정
- 5. 큰 바이너리 파일에서 문자열 검색
- 6. C# .Net 64K by 파일로 큰 스트림 작성하기
- 7. Python : 문자열 주위에 큰 따옴표 나 큰 따옴표를 넣으십시오.
- 8. 내가 제거하는 빠른 함수를 작성하기 위해 노력하고있어 문자열
- 9. int 1 바이트를 사용하지 않고 OutputStream에 문자열 작성하기
- 10. 큰 문자열 모음 내에서 많은 수의 문자열 찾기
- 11. Antlr/Stringtemplates를 사용하여 번역기 작성하기
- 12. 80 자보다 큰 JSON 문자열 전달
- 13. 매우 큰 문자열 메시지를 처리하는 프로토콜 버퍼?
- 14. 비교를 위해 큰 숫자를 문자열 형식으로 변환
- 15. 문자열 내의 모든 큰 따옴표를 바꾸십시오.
- 16. 큰 문자열 : 텍스트 파일 또는 SQL DB입니까?
- 17. 큰 텍스트 파일의 문자열 일치 여부?
- 18. 문자열 구현에서 가장 큰 palindrome 찾기
- 19. C++에서 큰 따옴표 붙은 문자열
- 20. 게시물 검색 알고리즘 작성하기
- 21. Perl에서 SQL 파일 작성하기
- 22. 파이썬에서 반복적으로 XML 노드 작성하기
- 23. plist 파일에 NSMutableArray의 내용 작성하기
- 24. C에서 .NET 객체 작성하기?
- 25. WHERE 문을 동적으로 작성하기
- 26. 게임용 기능 사양 작성하기
- 27. PHP에서 간단한 preg_replace 작성하기
- 28. qooxdoo로 xml 작성하기
- 29. Python 목록 사전 작성하기
- 30. onkeypress로 숫자 단어 작성하기
API가 있기를 바랬지 만 근본적으로 내가 생각한 것을 확인했습니다. – Glen