专栏首页阿林前端开发攻城狮open()+直接缓冲区使用原理
原创

open()+直接缓冲区使用原理

通过非直接缓冲区读写数据,需要通过通道来传输缓冲区里的数据

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class demo4 {
    public static void main(String[] args) {
        FileInputStream is = null;
        FileOutputStream os = null;
        // 获得通道
        FileChannel inChannel = null;
        FileChannel outChannel = null;

        // 利用 try-catch-finally 保证关闭
        try {
            is = new FileInputStream("");
            os = new FileOutputStream("");

            // 获得通道
            inChannel = is.getChannel();
            outChannel = os.getChannel();

            // 获得缓冲区,用于在通道中传输数据
            ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

            // 循环将字节数据放入到buffer中,然后写入磁盘中
            while (inChannel.read(byteBuffer) != -1) {
                // 切换模式
                byteBuffer.flip();
                outChannel.write(byteBuffer);
                byteBuffer.clear();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inChannel != null) {
                try {
                    inChannel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (outChannel != null) {
                try {
                    outChannel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

open()+直接缓冲区

  • 通过open获得通道
  • 通过FileChannel.map()获取直接缓冲区

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

关注作者,阅读全部精彩内容

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 双缓冲(Double Buffer)原理和使用

    原文出自:http://blog.csdn.net/xiaohui_hubei/article/details/16319249

    233333
  • Linux——Linux系统编程之文件IO操作总结(缓存IO/直接IO、打开open、关闭close、写入write、读取read)

    Linux中一切皆文件,那么怎么操作文件呢?这里涉及到文件的I/O操作,在此总结了下缓存I/O与直接I/O,文件的打开(创建)、关闭、读写等操作。

    Winter_world
  • non-blocking I/O Multiplexing + poll/epoll 的正确使用

    在前面的文章中曾经粗略讲过poll,那时是用阻塞IO实现,在发送和接收数据量都较小情况下和网络状况良好的情况下是基本没有问题的,read 不会只接收部分数据,...

    bear_fish
  • 浅谈 non-blocking I/O Multiplexing + poll/epoll 的正确使用

    在前面的文章中曾经粗略讲过poll,那时是用阻塞IO实现,在发送和接收数据量都较小情况下和网络状况良好的情况下是基本没有问题的,read 不会只接收部分数据,w...

    s1mba
  • Python进阶三部曲之IO操作

    写在前面:前几天准备做数据分析,发现没有数据来源,于是我不得不准备爬虫方面的教程了。

    龙哥
  • python_IO编程

    本篇文章将介绍python里面的I/O编程。更多内容请参考:python学习指南 I/O编程 读写文件时最常见的IO操作。Python内置了读写文件的函数...

    用户1174963
  • 1(UNIX基础)

    操作系统可定义为一种软件,它控制计算机硬件资源,又称之为内核(kernel)。 内核的接口被称为系统调用(system call)。公用函数库在系统调...

    提莫队长
  • 存储映射I/O(mmap函数)

    存储映射I/O能将磁盘文件映射到存储空间的一个缓冲区。从而实现从缓冲区读,写文件。这样,就可以在不使用read和write的情况下执行I/O。使用存储映射来进行...

    zy010101
  • Python IO

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, clo...

    职场亮哥
  • 不同缓冲区实现传输效果不一样

    用户7108768
  • java 语音聊天室

      现在已经可以capture到话筒的声音到wav文件了。   正在准备把捕捉到的流直接播放。用多线程,死机了2次。API很不熟悉。

    田春峰-JCJC错别字检测
  • linux系统编程之基础必备(二):C 标准IO 库函数与Unbuffered IO函数

    先来看看C标准I/O库函数是如何用系统调用实现的。  fopen(3)  调用open(2)打开指定的文件,返回一个文件描述符(就是一个int 类型的编号),...

    s1mba
  • Python文件IO操作

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, clo...

    py3study
  • Python的io模块详解

    Python的io模块提供了多个流式处理接口,具体的处理函数实现位于_pyio.py模块中。 在_io.py模块中,提供了唯一的模块方法open(name, ...

    py3study
  • 【13】Python之常用文件操作

    f=open('so_file',encoding="utf-8")  #打开文件,并读取。Windows上默认字符集GDK,所以这里指定了字符集,不然会报错。...

    py3study
  • c++中ifstream及ofstream超详细说明

    前文说过,ifstream是继承于istream,ofstream是继承于ostream,fstream是继承于iostream类,而他们使用的缓冲区类是fil...

    cpp加油站
  • [技巧篇] 如何在不会的情况下解释 Python 设置文件的缓冲的问题

    美好的中秋,朋友圈在享受悠闲周末的时候,刚入门 Python 的程序员小R在公司埋头加班,不知时间几何,一不小心把下周的工作捯饬完了,心情愉悦,不能自拔。

    编程文青李狗蛋
  • Android 利用V4L2 调用camera

    出于安全原因,使用Android 原生的Camera接口,必须要使用可见的surface显示摄像头的preview图像,即必须要让用户看到你的应用正在使用摄像头...

    小蚂蚁与大象
  • 面试官:换人!他连 TCP 这几个参数都不懂

    TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用。

    小林coding

扫码关注云+社区

领取腾讯云代金券