Channel的使用

Posted 月色深潭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Channel的使用相关的知识,希望对你有一定的参考价值。

Channel必须要通过buffer来读写

1. Channel需要通过IO流的getChannel()方法获取

2. buffer需要通过Channel的map()方法获取

 

 

package com.io.channel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

public class ChannelB {

    public static void main(String[] args) {


        String path = "E:\\\\fitnesse\\\\workspace\\\\javaio\\\\resource\\\\";
        String nameFilePath = path + "name.txt";
        String copyFilePath = path + "copy.txt";
        
        File nf = new File(nameFilePath);
        File cf = new File(copyFilePath);
        

        //第一步获取Channel,有很多种Channl,这里使用到的是FileChannel
        try(FileChannel inChannel = new FileInputStream(nf).getChannel();
            FileChannel outChannel = new FileOutputStream(cf).getChannel())
        {
            //从name.txt中读取内容到buffer中
            MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY , 0 , nf.length());
            
            //将从name.txt中读取的内容写入到copy.txt
            outChannel.write(buffer);
            buffer.clear();
            
            //设置编码和解码器
            Charset charset = Charset.forName("GBK");
            CharsetDecoder decoder = charset.newDecoder();        
            CharBuffer charBuffer =  decoder.decode(buffer);        
            System.out.println(charBuffer);
            
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
    }

}

name.txt文件内容

执行程序后输出的内容

1231542155112221
45444545454454545
41511111111111111111111111111111
88888888888888888888888888888888888888

copy.txt的内容

 

以上是关于Channel的使用的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg拼接文件时报错channel element 1.0 is not allocated的分析思路和解决方法

FFmpeg拼接文件时报错channel element 1.0 is not allocated的分析思路和解决方法

FFmpeg拼接文件时报错channel element 1.0 is not allocated的分析思路和解决方法

Kotlin 协程Channel 通道 ④ ( Channel 通道的热数据流属性 | Channel 通道关闭过程 | Channel 通道关闭代码示例 )

netty系列之:channel和channelGroup

Channel 的死锁