2012-05-07 6 views
9

에서이 InputStream를 사용하는 코드입니다 수신 만 가지고 오류 :는 바이트 [] 소켓 여기

bin = new ByteArrayInputStream(socket.getInputStream()); 

가 소켓에서 ByteArrayInputStream를 사용하여 byte[]를받을 수 있습니까?

+1

* 아래로 바이트 배열 입력 스트림을 생성 할 수 있습니다, 그것은 완전한 만들려면 "하지만 오류가 발생했습니다 :"*있어 어떤 오류를? 항상 예외 및 오류 출력을 질문에 복사/붙여 넣기 (코드 태그 사용). –

+0

질문에 의미가 없습니다. ByteArrayInputStream는 바이트 배열에서 바이트를 읽습니다. 소켓에서 읽으려는 경우 바이트 배열에서 읽을 수 없습니다. 여기서 어떤 문제를 해결하려고합니까? – EJP

답변

21

아니요. 바이트 배열이 있고 파일 인 것처럼 배열에서 읽으려는 경우 ByteArrayInputStream을 사용합니다.

InputStream stream = socket.getInputStream(); 
byte[] data = new byte[100]; 
int count = stream.read(data); 

변수 count 실제로 읽은 바이트 수를 포함, 데이터는 물론 배열 data에있을 것입니다 : 당신은 그냥 소켓에서 바이트의 배열을 읽고 싶다면,이 작업을 수행.

7

소켓에서 직접 읽음으로써 ByteArrayInputStream의 인스턴스를 가져올 수 없습니다.
먼저 읽을 내용과 바이트 내용을 찾아야합니다.
그런 다음이를 사용하여 ByteArrayInputStream의 인스턴스를 만듭니다. 당신이 손에 baos을 가지고 지금

InputStream inputStream = socket.getInputStream(); 

// read from the stream 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] content = new byte[ 2048 ]; 
int bytesRead = -1; 
while((bytesRead = inputStream.read(content)) != -1) { 
    baos.write(content, 0, bytesRead); 
} // while 

, 나는 당신이 여전히 bais 인스턴스를 필요가 있다고 생각하지 않습니다.
는하지만,
당신이

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());