java.nio.* 篇(1) FileChannel AsynchronousFileChannel ServerSocket Socket 使用案例

简介: java.nio.* 篇(1) FileChannel AsynchronousFileChannel ServerSocket Socket 使用案例

java.nio.FileChannel 使用demo

 /**
     * @description: demos of jdk8 java.nio.FileChannel class
     * java.nio.FileChannel 作用:FileChannel 是文件通道类, 管道形式打开文件
     * FileChannel MappedByteBuffer 例子:
     */
    @Test
    public void testFileChannel() throws IOException {
        //filechannel 写入demo
        byte[] bytes =  "hello world".getBytes();
        RandomAccessFile fis = new RandomAccessFile("D:\\soft\\doc\\file_channel.txt","rw");
        FileChannel fileChannel = fis.getChannel();
        MappedByteBuffer writembb = fileChannel.map(FileChannel.MapMode.READ_WRITE,0,1024*1024);
        writembb.put(bytes,0,bytes.length);
        fis.close();
        fileChannel.close();
        //filechannel 读取demo
        byte[] rbytes = new byte[1024];
        fis = new RandomAccessFile("D:\\soft\\doc\\file_channel.txt","rw");
        fileChannel = fis.getChannel();
        MappedByteBuffer readmbb = fileChannel.map(FileChannel.MapMode.READ_WRITE,0,1024*1024);
        readmbb.position(0);
        readmbb.get(rbytes,0,bytes.length);
        String rb = new String(rbytes);
        System.out.println(rb);
     }

java.nio.AsynchronousFileChannel 使用demo

/**
     * @description: demos of jdk8 java.nio.AsynchronousFileChannel class
     * java.nio.AsynchronousFileChannel 作用:AsynchronousFileChannel 是 异步文件通道类, 管道形式打开文件
     * FileChannel MappedByteBuffer 例子:
     */
    @Test
    public void testAsynchronousFileChannel() throws IOException {
        //asynchronousFileChannel 写入demo
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        byteBuffer.put("hello".getBytes());
        AsynchronousFileChannel wfileChannel = AsynchronousFileChannel.open(Paths.get("D:/soft/doc/file_channel2.txt"), StandardOpenOption.CREATE,StandardOpenOption.WRITE);
        byteBuffer.flip();
        wfileChannel.write(byteBuffer, 0, null, new CompletionHandler<Integer, Object>() {
            @Override
            public void completed(Integer result, Object attachment) {
                try {
                    wfileChannel.force(true);
                    wfileChannel.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            @Override
            public void failed(Throwable exc, Object attachment) {
            }
        });
        //asynchronousFileChannel 读取demo
        byteBuffer.clear();
        AsynchronousFileChannel rFileChannel = AsynchronousFileChannel.open(Paths.get("D:/soft/doc/file_channel2.txt"), StandardOpenOption.READ);
        rFileChannel.read(byteBuffer, 0, null, new CompletionHandler<Integer, Object>() {
            @Override
            public void completed(Integer result, Object attachment) {
                try {
                    byteBuffer.flip();
                    System.out.println(new String(byteBuffer.array()));
                    rFileChannel.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            @Override
            public void failed(Throwable exc, Object attachment) {
            }
        });
    }

java.net.ServerSocket 使用demo

 /**
     * @description: demos of jdk8 java.net.ServerSocket class
     * 创建服务端,有客户端连接后发送hello 字符串,并接受客户端reply 回复
     *
     * */
    @Test
    public void testServer() throws IOException {
        ServerSocket serverSocket = new ServerSocket(8679);
        while(true){
            Socket socket = serverSocket.accept();
            socket.getOutputStream().write("hello".getBytes());
            try{
                ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
                byte[] bytes = new byte[1024];
                int read = 0;
                while ((read =socket.getInputStream().read(bytes))>0){
                    byteBuffer.put(bytes,0,read);
                    byteBuffer.flip();
                    String rs = new String(byteBuffer.array());
                    System.out.println(rs);
                    byteBuffer.clear();
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                if(!socket.isClosed()) {
                    try {
                        socket.close();
                    }catch (Exception e1){
                        e1.printStackTrace();
                    }
                }
            }
        }
    }


java.net.Socket 使用demo

 /**
     * @description: demos of jdk8 java.net.Socket class
     * 创建客户端,连接到服务端后接收到hello 字符串,并接向服务端发送reply 字符串回复
     */
    @Test
    public void testClient() throws IOException {
        Socket socket = new Socket("127.0.0.1", 8679);
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        byte[] bytes = new byte[1024];
        int read = 0;
        while ((read = socket.getInputStream().read(bytes)) > 0) {
            byteBuffer.put(bytes, 0, read);
            byteBuffer.flip();
            String rs = new String(byteBuffer.array());
            byteBuffer.clear();
            System.out.println(rs);
            socket.getOutputStream().write("reply".getBytes());
        }
    }


BIO 参考《通俗易懂的JAVA BIO NIO AIO 原理白话文解释,区别,优缺点及代码使用案例》

 



相关文章
|
1月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
71 3
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
66 2
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
37 2
|
2月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
45 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
2月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
58 15
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
33 1
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
24 1
|
2月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
43 5
|
2月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
55 2
|
2月前
|
Java C#
Java的监听处理事件--小球移动案例
Java的监听处理事件--小球移动案例
14 0