2014-12-14 7 views
0

я только начал играть с Java NIO пакеты УМ на немного потери У меня есть клиенткак напечатать строку из ByteBuffer

Socket s=new Socket(ip,port); 
OutputStream out=new OutputStream(); 
PrintStream ps=new PrintStream(s.getOutputStream()); 
String t=""hiya"; 
ps.print(t); 
ps.flush(); 
InputSTreamReader in=new InputSTreamReader(s.getInputSTream); 
BufferReader b=nwe BufferedReader(in); 
System.out.println(b.readLine());//prints echo response from server 

и на стороне сервера

this.selkey = selkey; 
    this.chan = (SocketChannel) chan.configureBlocking(false); // asynchronous/non-blocking 
    buf = ByteBuffer.allocateDirect(64); // 64 byte capacity 
void read() { 
    try { 
      int amount_read = -1; 
     try { 
      amount_read = chan.read((ByteBuffer) buf.clear());      
     } catch (Throwable t) { 
      } 
     if (amount_read == -1) 
      disconnect();//deelts client on exit 
     if (amount_read < 1) 
      return; // if zero 
      System.out.println("sending back " + buf.position() + " bytes"); 
      // turn this bus right around and send it back! 
      buf.flip(); 
      chan.write(buf);//sending data 2 client 
    } catch (Throwable t) { 
      disconnect(); 
      t.printStackTrace(); 
    } 
} 

Что это такое, я отправляю строку t на сервер в bytebuffer и эхо-файл обратно, который работает нормально, но hoiw я бы напечатал строку на стороне сервера, например, по методу чтения

ответ

0

k Это типично работали над этой проблемой как час, но когда я поставил вопрос, ответ на меня мне понравился CAST IT TO CHAR!

это работает

buf.flip(); 
while (buf.hasRemaining()) { 
     System.out.print((char) buf.get(); 
     } 
System.out.println(); 
0

Поскольку yo отправляет данные в байте, он не будет работать как строки. И даже если бы вы это сделали, это было бы ссылкой на массив байтов. Попробуйте следующее: String str = new String (buff);

Смежные вопросы