Java_NIO基础分析-1

1.在java_nio中,channel和buffer是非常关键的概念,先来看看channel&buffer在类的体系结构中的位置和主要属性和方法

在下面完成的文件拷贝过程,会发现所有的数据都是先进入到buffer中,之后channel会按照业务逻辑对buffer进行操作。

import java.io.*;
import java.nio.*;
import java.nio.channels.*;

public class CopyFile {
    public static void main(String args[]) throws Exception {
        if (args.length < 2) {
            System.err.println("Usage: java CopyFile infile outfile");
            System.exit(1);
        }

        String infile = args[0];
        String outfile = args[1];
        //得到输入流和输出流
        FileInputStream fin = new FileInputStream(infile);
        FileOutputStream fout = new FileOutputStream(outfile);
        //得到输入channel和输出channel
        FileChannel fcin = fin.getChannel();
        FileChannel fcout = fout.getChannel();
        //new一个ByteBuffer对象
        //Buffer对象有四个非常重要的数据position,limit,capacity,mark,他们共同完成了复杂的内部读写的转换,重置等操作,设计的非常精妙。
        ByteBuffer buffer = ByteBuffer.allocate(1024);

        while (true) {
            //开始读之前先调用clear,设置position = 0;limit = capacity;mark = -1;
            buffer.clear();
            //从输入channel读取数据到buffer中
            int r = fcin.read(buffer);
            //读到-1表示读文件结束了。
            if (r == -1) {
                break;
            }
            //从读模式转换到写模式中,设置limit = position;position = 0;mark = -1;
            buffer.flip();
            //把buffer中的内容写入到输出channel中
            fcout.write(buffer);
        }
    }
}

通过图和代码例子可以对NIO中的channel,buffer有一个基本的了解!

Java_NIO基础分析-1

时间: 2024-10-20 21:35:26

Java_NIO基础分析-1的相关文章

Python学习教程(Python学习路线):Pandas库基础分析-详解时间序列的处理

Python学习教程(Python学习路线):Pandas库基础分析-详解时间序列的处理 在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律.Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器. 1.生成日期序列 主要提供pd.data_range()和pd.p

面向对象(一):基础分析

一.Java中的内存分配 Java 程序在运行时,需要在内存中分配空间.为提高运算效率,对内存空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式与内存管理方式. 1.Class Loader 类加载器 类加载器的作用是加载类文件到内存,编程字节码.比如编写一个HelloWord.java程序,然后通过javac编译成class文件, Class Loader承担加载到内存的责任. 2.STACK 栈:存放局部变量. 数据用完就释放,一定是脱离了它的作用域. Java中,栈的大小通过-

6. 成交量基础分析

1. 成交量和量能分析及分类 多头量能- 买入看涨的力量 空头量能- 卖出看跌的力量 2. 多头量与供求关系 在一段时间内,如果买入看涨的资金越多,买盘越踊跃,同时愿意卖出的数量不多,形成供不应求,价格上涨的可能性很大,通常表现为放量上涨,说明多头力量占主导优势. 3. 空头量与供求关系 在一段时间内,如果卖出的人越多,买盘不活跃,同时愿意买入的数量不多,形成供过于求,价格下跌的可能性很大,通常表现为放量下跌,说明空头力量占主导优势.

java_nio

Java nio 概述 Java NIO 由以下几个核心部分组成:Channels,Buffers,Selectors 虽然Java NIO 中除此之外还有很多类和组件,Channel,Buffer 和 Selector 构成了核心的API.其它组件,如Pipe和FileLock,是与三个核心组件共同使用的工具类. Channel 和 Buffer 基本上,所有的 IO 在NIO 中都从一个Channel 开始.Channel 有点象流. 数据可以从Channel读到Buffer中,也可以从Bu

Android基础分析目录

第一部分    android消息机制   1深入理解android的消息机制 handler message looper,   2.异步处理机制 AysncTask第二部分   android时间传递机制   1.深入理解android事件传递机制,源码讲解事件的分发.传递.拦截   2.源码解析android的事件传递传递机制   3.源码解析android时间的销毁机制第三部分   android四大组件   1.深入理解android的四大主件,深入讲解activity的是如何在fra

python 元组 列表 字典基础分析:

一.元组 1.元组的定义,创建 tuple = ('apple','banana','grange','orange','anguo','c++') 注:该元组由6个元素组成,元素之间用逗号隔开. tuple = ('apple',) 注:一个元素后面跟一个逗号 2.元组的访问 (1)索引是一对方括号中的数字,索引也称"下标" tuple = ('apple','banana','grange','orange','anguo','c++') print(tuple[1]) print

投资银行学词汇

主页 > 专业术语 A A,B shares A,B???br/> ABS(asset-backed securities) 资产支持证券 accounts receivable 应收账款 acquisition 收购 acting in concert 一致行???br/> active market 活跃市场 additional float 扩股 administration structure 治理结构 ADR(American Depository Receipt??? 美国存

Timing_Analyzer学习记录

Timing Analyzer 综述 使用该软件可以在设计中完成以下一些任务:在设计中进行静态时序分析:在映射.布局.布线后都可以立即进行时序分析:可通过GUI/tcl命令行/xtclsh应用/批处理/微控制命令等实现分析:报告指定路径延迟.关键路径延时.电路运行周期.可靠速度/电压/温度等的分布信息:做建立时间和保持时间的分析:有层次化索引用于报告内容的快速定位:可在Technology Viewer 和Floorplan-Implemented中查看指定路径 相关文件特征和流程 输入文件:

《R语言实战》读书笔记(一)

以下全为个人理解,若不全面,你打我啊! 首先,本书分成三个部分: 第一:数据的操作.(第二.四.五.十五章) 分为数据结构(合并与重塑),变量或观测(创建,修改,删除,重命名,选取),特殊值的处理(缺失值处理),以及一般函数. 第二:图形的绘制.(第三.六.十一章) 分为一维变量,二维变量,三维及多为变量的可视化.每一种又分为定性变量和定量变量两种类型. 第三:数据分析.(第七到十章以及十二到十四章) 基础分析(即频数/位置/分布等), 关联性分析(独立性与相关性), 差异性分析(样本与总体.两