2015-01-02 4 views
1

java.net.Socket 및 java.io에 대해 서버는 내가 ObjectXXXStream를 사용하는 경우 내가 그것을 만들 수 있습니다, 처음 사용 ObjectOutputStream에가 (클라이언트, 읽기) 객체를 작성한 다음 (클라이언트, 읽기) 작성의 BufferedWriter를 사용 할 수 있습니다.Java 소켓 : 하나씩 다른 두 가지 방법으로 스트림 읽기/쓰기

를 클라이언트에 메시지를 보내려고 또는 BufferedXXX 만 허용되지만 한 스트림에서 함께 사용할 수는 없습니다. 어떻게해야합니까?

서버 :

oos = new ObjectOutputStream(client.getOutputStream()); 
oos.writeObject(dc); 
// oos.close(); 

bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));   

bw.write("hahaha"); 
bw.flush(); 

while(true){ 
    line=br.readLine(); 
    if(line != null){ 
     ExecuteInput(line); 
    } 
} 

클라이언트는 :

ois = new ObjectInputStream(socket.getInputStream()); 
XXX dc = (XXX) ois.readObject(); 
// ois.close(); 

String line; 
while(true){ 
    try { 
     // System.out.println("000000"); 
     line=br.readLine(); 
     // System.out.println("111111"); 
     if(line != null) 
      System.out.println("aaaa "+line); 
    } catch (IOException e) { 
     System.out.println("222222"); 
     e.printStackTrace(); 
    } 
} 
+0

왜 그냥 모두 같은 하나를 선택? – redFIVE

답변

0

당신은 모두가 쓰기 작업을 위해 ObjectOutputStream을 사용합니다. 한 소켓에 두 가지 유형의 스트림을 사용할 수 없으므로 가장 기능적으로 선택할 수 있습니다.

실제로 개체를 보내는 것이 필요한지는 묻습니다. 대신 객체의 상태와 그 상태로 수행해야 할 작업을 지정하는 "opcode"를 보낼 수 있습니다. 하지만 dc의 목적을 모르는, 그래서

당신은 하나 또는 그 이상이 버퍼링 소켓에서 여러 스트림/리더/라이터를 사용할 수 없습니다
+0

나는 단지 데이터 세트를 파싱하는데 길다는 것을 안다. (나는 단지 dc에서 클라이언트로 데이터를 전송하기를 원한다). 대신 BufferedReader/Writer를 사용해야하는 것 같습니다. – nblintao

+0

@nblintao 저장된 대역폭이 그만한 가치가 있다고 생각합니다. 만약 당신이 객체를 보내지 않았다면, 예,'BufferedReader'. 'BufferedReader'가 그 기능을 가지고 있지 않기 때문에 당신이 객체를 보내고 있다면, 당신은'ObjectInputStream'을 찾을 것입니다. –

0

, 두 BufferedWriterObjectOutputStream는 확인할 수 없었다 버퍼링.

당신이 문자열을 읽을 필요 의미 writeUTF()를 통해 문자열을 보내 그냥 ObjectOutputStream()를 사용하고 다른 개체로 모든 것을 보내거나 하나 readUTF().

관련 문제