`

缓冲区Buffer与通道Channel

 
阅读更多

一、一般来说缓冲区和通道结合在一起使用,写入文件的时候,需要先存放在缓冲区,然后通过通道写入。读取文件的时候也类似,通过通道读取在缓冲区。然后通过缓冲区获取文件内容。

     Buffer针对每一种java基本类型都有实现。Channel针对不同的使用对象也有不同的实现,一般常见的为FileChannel与SocketChannel两类。

    Buffer底层实现为数组,有三个重要的参数,position,limit,capacity,分别代表当前位置,剩余空间,最大容量

    Buffer有两种模式,读模式与写模式。通过方法flip()进入读取模式,clear()方法进入写入模式。

 

二、代码实例:

package nio;

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

/**
 * NIO拷贝文件(Buffer与FileChannel的使用实例)
 * 
 * @author 
 * @version $Id: CopyFile.java, v 0.1 2014年3月2日 下午12:34:55  Exp $
 */
public class CopyFile {

    public static void main(String[] args) throws Exception {

        String srcFile = "D://1.wmv";
        String targetFile = "D://2.wmv";

        FileInputStream fin = null;
        FileOutputStream fout = null;
        FileChannel finc = null;
        FileChannel foutc = null;

        try {
            fin = new FileInputStream(srcFile);
            fout = new FileOutputStream(targetFile);
            finc = fin.getChannel();
            foutc = fout.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate(1024);

            while (true) {
                buffer.clear();
                int n = finc.read(buffer);
                if (n == -1) {
                    break;
                }

                buffer.flip();
                foutc.write(buffer);
            }

        } catch (Exception e) {
            e.fillInStackTrace();
        } finally {
            if (finc != null) {
                finc.close();
            }
            if (foutc != null) {
                foutc.close();
            }
            if (fin != null) {
                fin.close();
            }
            if (fout != null) {
                fout.close();
            }
        }
    }
}

 

  上面的代码中,通过通道将文件内容读取到缓冲区,然后通过通道写入到文件。Buffer在文件读取之前调用clear,在文件写入之前调用flip。

 

 

 

 

 

 

分享到:
评论

相关推荐

    Java NIO(通道+缓冲区+选择器)

    NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),这些组件协同工作,提升了数据传输的效率。 **通道(Channel)**: 1. **通道基础**:通道是一种从源读取数据到目标写入数据的途径,它...

    java通道处理程序

    `Channel Deal` 可能会涉及到Buffer的read()和write()方法,用于将数据从通道读入缓冲区,或者从缓冲区写入通道。 3. **选择器(Selector)**:为了同时管理多个通道,Java NIO提供了一种多路复用器(Selector)...

    详细了解JAVA NIO之Buffer(缓冲区)

    在实际应用中,Buffer可以与Channel结合使用,实现数据的高效传输。例如,在读取文件时,可以使用FileChannel来读取文件,并将数据写入到Buffer中,然后可以从Buffer中读取数据。 以下是一个使用Buffer读取文件的...

    032002_【第20章:Java新IO】_通道(Channel)_java_hearing3oc_扣弄你澳大_stoppedh

    3. **关联缓冲区**:通过`read()`或`write()`方法将通道与缓冲区关联,进行数据传输。 4. **关闭通道**:完成操作后,记得关闭通道以释放资源。 `stoppedhua`这个标签可能是表示某个教学过程或者代码执行被中断的...

    java NIO 视频教程

    标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Non-blocking IO(非阻塞IO) Java NIO...

    [ Java ] 最通俗易懂的 Java NIO 讲解

    文章目录IO 与 NIO 的比较通道和缓冲区缓冲区(buffer)通道(channel)使用 NIO 完成本地通信使用 NIO 完成网络通信管道 IO 与 NIO 的比较 IO NIO 面向流(Stream Oriented) 面向缓冲区(Buffer Oriented)...

    尚硅谷Java视频_NIO 视频教程

    尚硅谷_NIO_缓冲区(Buffer)的数据存取 ·03. 尚硅谷_NIO_直接缓冲区与非直接缓冲区 ·04. 尚硅谷_NIO_通道(Channel)的原理与获取 ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件 ·06. 尚硅谷_NIO_分散读取与聚集...

    缓冲池 java

    **通道(Channel)与缓冲区(Buffer)** 在Java NIO中,数据通过通道(Channel)进行读写,而Buffer则作为数据的载体。通道可以看作是连接I/O源和目的地的管道,比如文件、套接字或者网络流。读取数据时,数据会从...

    java nio ppt

    缓冲区的类型与通道相关,主要有以下几种: - ByteBuffer:存储基础数据类型为byte的缓冲区。 - CharBuffer:存储基础数据类型为char的缓冲区。 - DoubleBuffer:存储基础数据类型为double的缓冲区。 - ...

    Java NIO 主要类和方法(Java NIO中文版 附录C)

    Java NIO(New Input/Output)是Java提供的一种新的输入输出处理机制,它与传统IO基于流的处理方式不同,NIO支持面向缓冲区的(Buffer-oriented)、基于通道的(Channel-based)I/O操作。在Java NIO中,Buffer类是...

    java NIO学习系列 笔记

    NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式进行传输,从而提高了性能。 1. **通道(Channel)**: - 通道是数据传输的双向路径,可以将数据从源读取到目标,也可以将数据...

    Java网络编程(5).pdf

    NIO基于缓冲区Buffer、通道Channel和选择器Selector等机制实现高性能、非阻塞I/O操作。 从提供的【部分内容】中可以提取出以下知识点: 1. NIO核心组件:在Java NIO中,主要包含三个核心组件,分别是Buffer(缓冲...

    Java性能优化之使用NIO提升性能(Buffer和Channel)

    NIO的核心组件包括Buffer(缓冲区)和Channel(通道),它们共同解决了传统I/O模型中的一些性能瓶颈。 1. **Buffer(缓冲区)**: - 缓冲区是NIO中的核心概念,它是一个对象,包含了存储数据的内存块。Buffer有...

    javaNIO很好的资料

    NIO 的核心组件包括 Channel(通道)、Buffer(缓冲区)和 Selector(选择器)。 - **Channel(通道)**:通道类似于流,但是数据只能从 Channel 读取到 Buffer 中,或者从 Buffer 写入到 Channel 中。 - **Buffer...

    深入浅出NIO

    在Java编程领域,NIO(New Input/Output)是一种用于替代标准IO模型的机制,其核心在于非阻塞的I/O操作和通道(Channel)及缓冲区(Buffer)的使用。传统的IO模型,如描述中的“阻塞I/O”,在读写数据时会一直等待...

    Java NIO 系列教程1

    NIO的主要特点是基于通道(Channel)和缓冲区(Buffer)进行数据读写,并且支持非阻塞I/O操作和多路复用,这使得它在处理大量并发连接时表现出色。 1. **Java NIO概述** Java NIO的核心组件包括通道(Channel)、...

    Java NIO.docx

    Selector 是 Java NIO 中的一个核心组件,它可以在一个线程上通过一个选择(Selector)使用轮询的方式去监听多个通道 Channel 上注册的事件,从而在一个线程上就能实现对多个 Channel 的处理。 Java NIO 的优点 ---...

    NIO学习与总结

    - **缓冲区(Buffer)和通道(Channel)**:NIO的核心在于缓冲区和通道这两个概念。所有的数据读写都需要经过缓冲区,而通道则连接着源与目标,用于数据的读取和写入。 ##### 1.2 缓冲区内部实现机制 缓冲区(Buffer)是...

    Java NIO中四大核心组件的使用详解.rar

    它们通常与通道配合使用,通过通道将数据写入缓冲区,或者从缓冲区读取数据。例如,FileChannel提供了read()和write()方法,可以直接读写文件。 在实际应用中,开发者首先创建缓冲区,然后通过通道进行数据传输。...

Global site tag (gtag.js) - Google Analytics