Mega Code Archive

 
Categories / Java by API / Java Nio Charset
 

CharsetDecoder decode(ByteBuffer in)

import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.util.Iterator; import java.util.Set; public class MainClass {   public static void main(String[] args) throws IOException {     Charset charset = Charset.forName("ISO-8859-1");     CharsetEncoder encoder = charset.newEncoder();     CharsetDecoder decoder = charset.newDecoder();     ByteBuffer buffer = ByteBuffer.allocate(512);     Selector selector = Selector.open();     ServerSocketChannel server = ServerSocketChannel.open();     server.socket().bind(new java.net.InetSocketAddress(8000));     server.configureBlocking(false);     SelectionKey serverkey = server.register(selector, SelectionKey.OP_ACCEPT);     for (;;) {       selector.select();       Set keys = selector.selectedKeys();       for (Iterator i = keys.iterator(); i.hasNext();) {         SelectionKey key = (SelectionKey) i.next();         i.remove();         if (key == serverkey) {           if (key.isAcceptable()) {             SocketChannel client = server.accept();             client.configureBlocking(false);             SelectionKey clientkey = client.register(selector, SelectionKey.OP_READ);             clientkey.attach(new Integer(0));           }         } else {           SocketChannel client = (SocketChannel) key.channel();           if (!key.isReadable())             continue;           int bytesread = client.read(buffer);           if (bytesread == -1) {             key.cancel();             client.close();             continue;           }           buffer.flip();           String request = decoder.decode(buffer).toString();           buffer.clear();           if (request.trim().equals("quit")) {             client.write(encoder.encode(CharBuffer.wrap("Bye.")));             key.cancel();             client.close();           } else {             int num = ((Integer) key.attachment()).intValue();             String response = num + ": " + request.toUpperCase();             client.write(encoder.encode(CharBuffer.wrap(response)));             key.attach(new Integer(num + 1));           }         }       }     }   } }