IO流与IO缓冲
1.字节与字符的演变
public class inputStream {
public static void test1() throws Exception{
File file= new File("D:\\log.txt");
//从文件中读取消息
FileInputStream inputStream =new FileInputStream(file);
System.out.println(inputStream.getChannel());
//决定是否使用缓存
BufferedInputStream stream=new BufferedInputStream(inputStream);
//filterInputStream的一种,控制特定输入流和输出流
DataInputStream in =new DataInputStream(inputStream);
FileOutputStream outputStream =new FileOutputStream(file);
BufferedOutputStream stream1=new BufferedOutputStream(outputStream,1024);
DataOutputStream out =new DataOutputStream(stream1);
//只能是英文或者数字
out.writeBytes("hello world!");
out.close();
while(in.available()!=0){
System.out.print((char)in.readByte());
}
in.close();
}
public static void test2() throws Exception{
File file=new File("D:\\log.txt");
FileInputStream inputStream =new FileInputStream(file);
InputStreamReader streamReader =new InputStreamReader(inputStream);
BufferedReader reader =new BufferedReader(streamReader);
FileOutputStream outputStream =new FileOutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
writer.write("哈哈");
writer.close();
while (reader.ready()){
System.out.print(reader.read());
}
reader.close();
}
public static void main(String[] args){
try {
test2();
} catch (Exception e) {
e.printStackTrace();
}
}
}
有一点很清楚,无论我们何时使用readline(),都不应该使用DataInputStream,而应该使用BufferedReader,除了这一点,DataInputStream仍然是I/O类库的首选成员。
2.通道与缓冲之间的秘密
/**
* 通道以原始的字节形式或者基本数据类型输出和读取数据
* 没办法输出或者读取对象,即使是字符串对象也不行
*
* NIO的方法主要是将数据以ByteBuffer的形式写入到文件,一块一块的写,就快了好多。
*/
public class Channels { private final static int SIZE=1024;
public static void main(String[] args)throws IOException{
FileChannel fc =new FileOutputStream("D:\\log.txt").getChannel();
//wrap()函数是用于将数组包装在ByteBuffer中
fc.write(ByteBuffer.wrap("some test!".getBytes()));
fc.close(); fc=new RandomAccessFile("D:\\log.txt","rw").getChannel();
//把通道随处移动到fc的末尾,进行数据追加
fc.position(fc.size());
fc.write(ByteBuffer.wrap("some more!".getBytes()));
fc.close(); fc=new FileInputStream("D:\\log.txt").getChannel();
//分配缓存
ByteBuffer buffer = ByteBuffer.allocate(SIZE);
//往缓存中写东西
fc.read(buffer);
//做好让别人读取字节的准备
buffer.flip();
while(buffer.hasRemaining()){
System.out.print((char)buffer.get());
}
}
}
如果把通道当作一个煤矿,则ByteBuffer则是去煤矿的唯一小车,ByteBuffer装成一块一块的,去读或者写。
IO流与IO缓冲的更多相关文章
- Java IO流之【缓冲流和文件流复制文件对比】
与文件流相比,缓冲流复制文件更快 代码: package Homework; import java.io.BufferedOutputStream; import java.io.File; imp ...
- java IO流之三 使用缓冲流来读写文件
原文:http://blog.csdn.net/haluoluo211/article/details/52183219 一.通过BufferedReader和BufferedWriter来读写文件 ...
- 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】
day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...
- File类与常用IO流第八章——缓冲流
第八章.缓冲流 缓冲流概述 缓冲流,也叫高效流,是对4个基本的FileXxx流的增强.按照数据类型分为4类: 输入缓冲流 输出缓冲流 字节缓冲流 BufferedInputStream Buffe ...
- IO流——常用IO流详解
1:字节流 字节流:用于处理以字节为单位的二进制文件(如音乐,图片等) InputStream 是抽象类 它的对应子类FileInputStream可以被实例化 构造方法: FileInputStre ...
- io流(io流的引入与文件字节流)
io流的引入与文件字节流 io流:就是一根吸管,插入后,可以操作目标文件 io流的分类: 按方向:输入,输出 按大小:字节,字符 按处理方式: 处理流:"管套着管" --- 流结合 ...
- Java IO流之字符缓冲流
字符流: 1.加入字符缓存流,增强读取功能(readLine) 2.更高效的读取数据 BufferedReader 从字符输入流读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取. FileRe ...
- (18)IO流之字节缓冲路
缓冲流 BufferedInputStream 缓冲输入流 前面的练习告诉我们使用缓冲数组读取的效率更高,为了方便的大家的操作,sun 位大家提供了一个缓冲输入字节流对象,让我们可以更高效率的读取文件 ...
- AJPFX总结IO流中的缓冲思想
缓冲思想 (因为内存的运算速度要远大于硬盘的原酸速度,所以只要降低硬盘的读写次数,就可以提高效率) 1. 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多, 2. 这是加 ...
随机推荐
- 自学Zabbix3.9.3-模板Templates-嵌套Nesting
自学Zabbix3.9.3-模板Templates-嵌套Nesting 嵌套是一个模板包含一个或多个其他模板的方法.可以在一个"嵌套"模板中将一些模板链接在一起.嵌套的好处在于,只 ...
- 项目管理: Alpha,Beta,RC,GA,Release
Alpha: Alpha是内部测试版,一般不向外部发布.也可以认为是演示版本.允许存在一定的问题(例如功能组合.异常流程处理.稳定性.性能存在部分问题) ...
- git忽略文件
.gitignore文件配置 ###################### # Project Specific ###################### /src/main/webapp/dis ...
- 《Spark大数据处理:技术、应用与性能优化》【PDF】
内容简介 <Spark大数据处理:技术.应用与性能优化>根据最新技术版本,系统.全面.详细讲解Spark的各项功能使用.原理机制.技术细节.应用方法.性能优化,以及BDAS生态系统的相关技 ...
- ImportError: No module named 'request'
使用系统自带的Python 2.7执行python时出现ImportError: No module named 'request'这样的报错,这是系统自带的Python没有requests库,这里可 ...
- 学习rollup.js模块文件打包
学习rollup.js模块文件打包 一:rollup 是什么?Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码. webpack 和 Rollup 对比不同点 ...
- JDK8.0新特性
连接转载地址:http://www.2cto.com/kf/201609/544044.html Eclipse: http://aiyiupload.oss-cn-beijing.aliyuncs. ...
- 聚簇(或者叫做聚集,cluster)索引和非聚簇索引
字典的拼音目录就是聚簇(cluster)索引,笔画目录就是非聚簇索引.这样查询“G到M的汉字”就非常快,而查询“6划到8划的字”则慢. 聚簇索引是一种特殊索引,它使数据按照索引的排序顺序存放表中.聚簇 ...
- input同步标签内容——函数
html部分: <h3 class="font18" id="tit1">微蜂传媒电子商务有限公司</h3> <span clas ...
- 删除SVN版本信息的两种方式
一.在linux下删除SVN版本信息 删除这些目录是很简单的,命令如下 find . -type d -name ".svn"|xargs rm -rf 或者 find . -ty ...