2014-04-19 3 views
0

소켓을 통해 이미지를 matlab 서버에서 Java 클라이언트로 보내려고합니다. 먼저 이미지를 바이트 배열로 변환하고 길이를 지정해야하는 클라이언트 측에서 readFully 메서드를 사용했습니다. 문제는 바이트 배열의 크기가 한 이미지에서 다른 이미지로 변경되고 write() 메서드를 통해 크기를 보낼 때 클라이언트 측에서 올바르게 읽지 않는다는 것입니다. 여기 내가 같은 읽기, readInt,이 외에도 readDouble 많은 방법을 시도 클라이언트 측에 내 코드matlab에서 소켓을 통해 java로 바이트 배열로 이미지 보내기

matlab에 서버

%% convert image 
Javaimage=im2java2d (image); 
Arraystream=ByteArrayOutputStream; 
ImageIO.write (javaimage,'jpg', arraystream) 
Arraystream.flush(); 
Bytearray=arraystream.toByteArray; 

%% send size through output stream 
Outstream=write (size (byteArray, 1)) 
%% send array 
outStream=write (byteArray); 

의 조각,하지만 난 문제가 쓰기() 메소드 I 생각 내의 writeInt()를 사용하려고하지만 MATLAB 내가 라이브러리가 필요 포함하더라도 그것을 인식하지 않았다 : 나는 또한 것을 포함해야한다

Java.io Java.net java.io.DataOutputStream의 Java.io.datainputstream

을 크기 그 배열은 일반적으로 10000 이상이다 나는 어떤 도움을 주셔서 감사합니다 미리 감사드립니다

+0

Arraystream = ByteArrayOutputStream; 정의되지 않은 함수 또는 변수 'ByteArrayOutputStream'. 이 문제를 해결하도록 도와 주시겠습니까? – user1850484

+0

@ user1850484, 정말 도와 드리고 싶습니다. 코드를 보여줌으로써 좀 더 명확히 할 수 있습니까 ?? 어쩌면 당신은 자바 라이브러리를 가져 오지 않았을 것입니다. – user3552551

+0

나는 이미 문제를 해결했다. 고맙습니다. – user1850484

답변

0

나는 마지막으로 점검해야 할만큼 간단하다는 대답을 마침내 발견했습니다.

나는 읽기 전용 방법이 있습니다 나는이

 InStream =socket.getInputStream; 
    OutStream=socket.getOutputStream; 

을 다음 이것은 당신은 (읽기로의 InputStream 클래스의 메소드를 사용) 쓸 수 있습니다 않은 소켓 입력 및 출력 스트림()를 생성 할 때 다른 형식의 데이터를 읽으려면 readInt() 및 writeInt와 같은 메서드를 사용하여 int, double 등의 기본 형식을 읽을 수있는 필터 클래스 유형 인 dataInputStream 및 dataOutput 스트림 클래스를 사용해야합니다. 이렇게하려면 위의 내용을 다음과 같이 변경해야합니다.

Instream=dataInputStream (socket.getInputStream); 
OutStream=dataOutputStream (socket.getOutputStream); 

그리고 간단합니다.

관련 문제