2011-09-26 3 views
1

TCP 소켓을 통해 일부 데이터베이스 데이터를 전송하려고합니다. 데이터는 JSON으로 포맷됩니다.Java 한계 (json 형식)

데이터베이스 크기가 커질 수 있으므로 String 객체의 최대 크기가 JSON 형식으로 전체 데이터를 저장하는 데 충분하지 않을까 걱정됩니다.

DataOutput 함수 writeUTF()을 사용하여 데이터를 전송하는 중에 이미 문제가 발생했습니다.

어떻게해야합니까? 어쩌면 데이터베이스 행을 CSV로 변환하고 라인별로 인터넷을 통해 전송할 수 있습니까? 또는 String 한계에 대해 걱정할 필요가 없으며 String 바이트를 가져 와서 소켓을 통해 전송하고 대상 바이트에서 String을 다시 작성하여 writeUTF() 문제를 해결할 필요가 없습니까?

답변

2

Java 문자열은 매우 길 수 있습니다. String 유형 자체에 문제가 발생할 가능성은 거의 없습니다. 문자열을 바이너리로 변환 한 다음 writeInt을 사용하여 바이트 수를 작성한 다음 바이트 자체를 작성해야합니다. writeUTF의 문제점은 writeShort을 사용하므로 최대 64K 개의 데이터 만 처리한다는 것입니다.

+0

당신은'{ "files": [ "name": "name_of_fie", "path": "파일 경로", "last_change": "timestamp", "parent_dir" : "parent folder"]}'나는 아무런 문제가 없으며 단지 소켓을 통해 바이트를 전송할 것입니까? – androidGR

+0

@androidGR : 예. 순진한 방법으로하면 메모리 측면에서 약간 비효율적입니다 (전체 텍스트에 대해 동시에 문자열 표현 * 및 * 메모리로 이진 인코딩 된 표현으로 끝날 것입니다). 쉽게 할 수 있습니다. 메모리가 문제가된다면, 한 번에 청크를 전송하고 ('writeUTF'를 사용하여 잠재적으로 할 수있는) 청크를 다른 끝에서'StringBuilder'를 사용하여 재구성 할 수 있습니다. –