zeroCopy

Server

public class OldServer {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8888);

        while (true) {
            Socket accept = serverSocket.accept();
            DataInputStream inputStream = new DataInputStream(accept.getInputStream());

            try {
                byte[] buffer = new byte[4096];

                while (true) {
                    int read = inputStream.read(buffer, 0, buffer.length);
                    if (-1 == read) {
                        break;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Client

public class OldClient {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("127.0.0.1", 8888);
        String fileName = "/Users/xxx/Downloads/bigfile.txt";

        InputStream inputStream = new FileInputStream(fileName);
        DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());

        byte[] buffer = new byte[4096];
        long readCount = 0;
        long total = 0;

        long startTime = System.currentTimeMillis();

        while ((readCount = inputStream.read(buffer)) >= 0) {
            total += readCount;
            outputStream.write(buffer);
        }

        System.out.println("发送总的字节数:" + total + ",耗时:" + (System.currentTimeMillis() - startTime));

        outputStream.close();
        inputStream.close();
        socket.close();
    }
}

Nio Server

public class NewServer {
    public static void main(String[] args) throws Exception {
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        ServerSocket serverSocket = serverSocketChannel.socket();
        serverSocket.setReuseAddress(true);
        serverSocket.bind(new InetSocketAddress(8888));

        ByteBuffer buffer = ByteBuffer.allocate(4096);

        while (true) {
            SocketChannel socketChannel = serverSocketChannel.accept();
            socketChannel.configureBlocking(true);

            int readCount = 0;

            while (-1 != readCount) {
                try {
                    readCount = socketChannel.read(buffer);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                buffer.rewind();//very important
            }
        }
    }
}

Nio Client

你可能感兴趣的:(zeroCopy)