A brief introduction to JavaINO (2)

1. Character cache

     * 字符缓存
     */
    @Test

    public void test8(){
        // 分配缓存
        CharBuffer charBuffer = CharBuffer.allocate(1024);
        charBuffer.put("哈尔滨北京上海");
        // 使恢复到起始位置可读取
        charBuffer.flip();

//        for (int i=0;i<charBuffer.limit();i++){
//            System.out.print(charBuffer.get());
//        }

//        System.out.println(charBuffer.toString());
//        char[] dst = new char[charBuffer.limit()];
//        charBuffer.get(dst);
//        System.out.print(new String(dst));
        System.out.println(new String(charBuffer.array(),0,charBuffer.limit())); // 0-1024个字节全部转换为字符数组打印到控制台上

    }

2. Encoding and decoding of character cache

/**
     * 编解码
     */
    @Test

    public void test9(){

        // 分配缓存
        CharBuffer buffer = CharBuffer.allocate(1024);
        buffer.put("哈尔滨北京上海");
        // 使恢复到起始位置可读取
        buffer.flip();

        //编码  字符转换为字节

        Charset charset = Charset.forName("utf-8");
        ByteBuffer byteBuffer = charset.encode(buffer);
        // 混乱的字节码
//        for(int i=0;i<byteBuffer.limit();i++){
//
//            System.out.println((char) byteBuffer.get());
//
//        }
        // 解码

        Charset charset1 = Charset.forName("utf-8");
        CharBuffer charBuffer = charset1.decode(byteBuffer);
        System.out.println(new String(charBuffer.array(),0,charBuffer.limit()));

    }

3. Network communication (blocking) code implementation


package edu.xalead;

import org.junit.Test;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class TestNet {
    /**
     * 客户端
     */
    @Test
    public void test1() throws Exception {
//        Socket s = new Socket("127.0.0.1", 8888);
//        SocketChannel socketChannel = s.getChannel();
        SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8888));
        FileChannel fileChannel = FileChannel.open(Paths.get("3.jpg"), StandardOpenOption.READ);
        // 分配缓存
        ByteBuffer buf = ByteBuffer.allocate(1024);

        // 从文件读字节到缓存

        while (fileChannel.read(buf)!=-1){
            buf.flip();
            socketChannel.write(buf);
            buf.clear();
        }
        // 关闭通道
        fileChannel.close();
        socketChannel.close();
    }
    SocketChannel socketChannel = null;
    /**
     * 服务端
     */
    @Test
    public void test2() throws Exception {

//        ServerSocket serverSocket = new ServerSocket(8888);
//        ServerSocketChannel channel = serverSocket.getChannel();

        // 创建通道
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        //绑定端口
        serverSocketChannel.bind(new InetSocketAddress(8888));
        while (true) {
            //监听并获得通道
            socketChannel = serverSocketChannel.accept();
            new Thread() {
                public void run() {
                    try {
                        FileChannel fileChannel = null;
                        //创建缓存
                        ByteBuffer buffer = ByteBuffer.allocate(1024);

                        //创建文件通道
                        fileChannel = FileChannel.open(Paths.get("7.jpg"), StandardOpenOption.WRITE, StandardOpenOption.CREATE_NEW);

                        //读网络数据到缓存
                        while (socketChannel.read(buffer) != -1) {
                            buffer.flip();
                            fileChannel.write(buffer);
                            buffer.clear();
                        }
                        fileChannel.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

            }.start();

        }
    }
    //关闭
//        serverSocketChannel.close();

}

Specific implementation, carefully consider the code. The code is almost commented, for reference only! ! ! !

101 original articles published · Liked 47 · Visitors 10,000+

Guess you like

Origin blog.csdn.net/TONGZONGE/article/details/104453456