十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1.基本概念
站在用户的角度思考问题,与客户深入沟通,找到鸠江网站设计与鸠江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名申请、网络空间、企业邮箱。业务覆盖鸠江地区。IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。
所有语言运行时系统提供执行I/O较高级别的工具。(c的printfscanf,java的面向对象封装)
2.Java标准io回顾
Java标准IO类库是io面向对象的一种抽象。基于本地方法的底层实现,我们无须关注底层实现。InputStream\OutputStream(字节流):一次传送一个字节。Reader\Writer(字符流):一次一个字符。
3.nio简介
nio是javaNewIO的简称,在jdk1.4里提供的新api。Sun官方标榜的特性如下:
–为所有的原始类型提供(Buffer)缓存支持。
–字符集编码解码解决方案。
–Channel:一个新的原始I/O抽象。
–支持锁和内存映射文件的文件访问接口。
–提供多路(non-bloking)非阻塞式的高伸缩性网络I/O。
本文将围绕这几个特性进行学习和介绍。
4.Buffer&Chanel
Channel和buffer是NIO是两个最基本的数据类型抽象。
Buffer:
–是一块连续的内存块。
–是NIO数据读或写的中转地。
Channel:
–数据的源头或者数据的目的地
–用于向buffer提供数据或者读取buffer数据,buffer对象的唯一接口。
–异步I/O支持
例子 1:CopyFile.java:
package sample; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class CopyFile { public static void main(String[] args) throws Exception { String infile = "C:\\copy.sql"; String outfile = "C:\\copy.txt"; // 获取源文件和目标文件的输入输出流 FileInputStream fin = new FileInputStream(infile); FileOutputStream fout = new FileOutputStream(outfile); // 获取输入输出通道 FileChannel fcin = fin.getChannel(); FileChannel fcout = fout.getChannel(); // 创建缓冲区 ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { // clear方法重设缓冲区,使它可以接受读入的数据 buffer.clear(); // 从输入通道中将数据读到缓冲区 int r = fcin.read(buffer); // read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-1 if (r == -1) { break; } // flip方法让缓冲区可以将新读入的数据写入另一个通道 buffer.flip(); // 从输出通道中将数据写入缓冲区 fcout.write(buffer); } } }