首页 > 编程语言 >10.java NIO核心2:通道(Channel)

10.java NIO核心2:通道(Channel)

时间:2022-08-18 19:56:12浏览次数:51  
标签:10 java NIO 文件 buffer printStackTrace ByteBuffer catch new

public interface Channel extend Clonseable{}

.

 

写案例:    
        @Test
    public void write() {
        try {
            //1.字节输出流到目标文件
            FileOutputStream fos = new FileOutputStream("data01.txt");
            //2.得到字节输出流对应的通道
            FileChannel channel=fos.getChannel();
            //3.分配缓冲区
            ByteBuffer buffer=ByteBuffer.allocate(1024);
            buffer.put("吴孟达,加油!".getBytes());
            //4.把缓冲区切换成写出模式
            buffer.flip();
            channel.write(buffer);
            channel.close();
            System.out.println("写数据到文件中!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

 

读数据:
 @Test
    public void read(){
        try {
            //1.获取文件输入流
            FileInputStream fis=new FileInputStream("data01.txt");
            //2.获取文件输入流对应的文件通道
            FileChannel channel = fis.getChannel();
            //3.定义一个缓冲区
            ByteBuffer buffer=ByteBuffer.allocate(11024);
            //4.读取数据到缓冲区
            channel.read(buffer);
            //5.切换读模式,将位置置为0
            buffer.flip();
            //6.重点:这里使用buffer.remaining去截取buffer中真正有数据的部分,要不输出的是1024个字节内容,后面没有占满也输出
            String message=new String(buffer.array(),0,buffer.remaining());
            System.out.println(message);//吴孟达,加油!
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3.使用Buffer完成文件复制

 @Test
    public void copy() {
        try {
            //原文件
            File srcFile = new File("C:\\Users\\24459\\Desktop\\client\\20200724194309755.png");
            //复制后的目标文件
            File destFile = new File("C:\\Users\\24459\\Desktop\\client\\备份.png");
            //定义文件输入流
            FileInputStream is = new FileInputStream(srcFile);
            //定义文件输出流
            FileOutputStream os = new FileOutputStream(destFile);
            //文件输入通道
            FileChannel isChannel = is.getChannel();
            //文件输出通道
            FileChannel osChannel = os.getChannel();
            //创建缓冲区
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            while (true) {
                //重点:每次进来都得先请缓存
                buffer.clear();
                //将数据读到缓冲区
                int flag = isChannel.read(buffer);
                //当读取完了就退出!
                if (flag==-1){
                    break;
                }
                //重置位置开始写
                buffer.flip();
                osChannel.write(buffer);
            }
            isChannel.close();
            osChannel.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

标签:10,java,NIO,文件,buffer,printStackTrace,ByteBuffer,catch,new
From: https://www.cnblogs.com/wmd-l/p/16599893.html

相关文章

  • #10006. 「一本通 1.1 练习 2」数列分段
    #include<bits/stdc++.h>usingnamespacestd;classSolution{ public: intsolve(vector<int>num,intm) { intans=1,sum=0; for(inti=0;i<num.size(......
  • 解决Java前后端跨域问题
    在后端解决在springboot项目的包目录下创建一个config包在包里新建一个CorsConfig类:packagecom.liu.springboot.config;importorg.springframework.context.annotat......
  • java使用秘钥加密密码
    对称加密什么是对称加密对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(miyao)一起经过特殊加密算法处理后,使其变成复......
  • JavaSE:第三章:程序流程控制
    史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。流程控制:包含顺序结构,分支结构,循环结构,break,continue,return,部分代码了解。更多内容请见原文,原文转载自:https://......
  • 1013 [USACO 2007 Ope S]Catch That Cow bfs 剪枝
     链接:https://ac.nowcoder.com/acm/contest/26077/1013来源:牛客网题目描述FarmerJohnhasbeeninformedofthelocationofafugitivecow......
  • 【MySQL】合并查询结果UNION
    1.UNION合并多条SELECT语句的查询结果,两个表对应的列数和数据类型必须相同,并且相互对应。会执行去重操作。2.UNIONALL不会执行去重操作如果明确知道合并数据后的结......
  • 1012 小雨坐地铁 分层图 最短路
     链接:https://ac.nowcoder.com/acm/contest/26077/1012来源:牛客网题目描述小雨所在的城市一共有mmm条地铁线,分别标号为1号线,2号线,……,m......
  • Java开发学习(二十六)----SpringMVC返回响应结果
    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户。比如:根据用户ID查......
  • java基础01
    注释单行注释://注释内容多行注释:/*(回车)​注释​*/文档注释:/**​*可执行的注释​......
  • JavaSE:第四章:面向对象上
    史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。面向对象上:包含面向对象与面向过程,类和对象,属性,方法,封装和隐藏,构造器(构造方法),this的使用,值传递,package、impor......