2011-12-05 1 views
0

Ive는 뭔가를 발견 할 수 없습니다. 서버에서 클라이언트로 문자열 [] 메시지를 보내지 만 이미지를 보내고 싶습니다. 문제는 클라이언트 파트의 객체를 검사하는 것이고, 바이트 []가 아니라 객체가 도착할 때 이미지를 처리하는 데 문제가 있다는 것입니다. 두 문자열 []와 [] 바이트 것은 어떤 조언이 좋은 것, 메신저 손실을 처리 할 수 ​​이미지 보내기 ObjectOutputStream

public void run() 
     { 
      while(active) 
      { 

       try 
       { 
        Object o; 
        o = input.readObject(); 

        System.out.println("Received from server!"); 

        if (o instanceof String[]) 
        { 
         String[] names = (String[]) o; 

         Refresh.getInstance().update(names);      
        } 
       } 
       catch (OptionalDataException e)  { e.printStackTrace(); Terminate(); } 
       catch (ClassNotFoundException e) { e.printStackTrace(); Terminate(); } 
       catch (IOException e)    { e.printStackTrace(); Terminate(); } 
      } 

     } 

하지만 지금 내가 원하는 스트림 :

지금 난 내 입력 문자열 []에 대해 이것을 사용 :(

나는 이런 식으로 뭔가 싶은 :

if (o instanceof byte[]) 
{ 
    // ...    
} 

을하지만, 이미지 파일이 올 때 = input.readObject은() 나에게이 있습니다 O를 문제 이후 나던 :

12-05 23 : 00 : 20.255 : 쓰기 바이트 교류

코드 : java.io.StreamCorruptedException가 : 잘못된 형식/System.err에 (16157) W

FileInputStream fis = new FileInputStream("images\\test.jpg"); 
byte[] buffer = new byte[fis.available()]; 
fis.read(buffer); 
ObjectOutputStream oos = new ObjectOutputStream(serverSocket.getOutputStream()) ; 
oos.writeObject(buffer); 
+0

바이트를 쓰는데 무엇을 사용합니까? 쓰기 (바이트)가 아닌 writeObject (바이트)를 사용해야합니다. –

+0

writeObject를 사용합니다. –

+0

다음은 제 박스에서 작동합니다 : http://pastebin.com/xP2T0Ux2. 당신이 데이터를 쓰는 방식에 뭔가 잘못된 것이 있어야합니다. 문제를 재현하는 SSCCE를 게시하십시오. –

답변

1

사용한다 객체 대신에 버퍼링 된 입력 출력 스트림. 오브젝트 스트림은, java 오브젝트의 직렬화 및 직렬화 복원을 위해서 (때문에) 사용됩니다.

+0

String [] 및 byte [] **는 ** serializable Java 객체입니다. –

+0

그 점에 동의하지만 대학원 프로젝트에서 비슷한 문제가 발생하여 솔루션이 위와 같았습니다. –