2012-03-30 3 views
1

부 : 나는 나에게 얼마나 많은 바이트를 올 것이다 모르는자바 무제한 배열

byte[] bytes = new byte[8000]; 
final DataInputStream in = new DataInputStream(s.getInputStream()); 
final int input = in.read(bytes); 

. 배열을 무제한으로 할 수 있습니까? 이 상황에서 어느 쪽이 최선입니까?

+0

ArrayList 또는 LinkedList 인 경우 색인에 추가하면됩니다. –

+1

C++ 부분을 편집했는데 완전히 다른 두 언어입니다. 질문 당 하나의 질문입니다. – Mat

+3

이 질문에 대한 답변보기 : http://stackoverflow.com/questions/5923817/how-to-clone-an-inputstream –

답변

1

당신이 읽을 때 많은 데이터를 사용할 수 방법을 모르는 지원하는 자바 버전을 사용하는 경우 ByteBuffer를 사용하는 것이 훨씬 나아. 예 : 예를 들어 소켓이 마지막으로 기록 된 시간이 16KB라면 이보다 작은 값이나 이보다 더 읽을 수 있습니다.

당신은 알 필요가 없다고 가정하는 코드를 작성해야합니다. 이렇게하면 길이에 관계없이 도착한대로 데이터를 볼 수 있습니다.


고정 길이 블록을 보내려면 먼저 크기를 보내야합니다.

byte[] bytes = new byte[1024]; 
final DataInputStream in = new DataInputStream(s.getInputStream()); 

int length = in.readInt(); 
if (length > bytes.length) bytes = new byte[length]; 
in.readFully(bytes, 0, length); // read length bytes or throw an exception.