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. 这是加 ...
随机推荐
- Oracle JDBC:驱动版本区别与区分 [转]
classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle ...
- Linux服务器配置(一)
Linux服务器配置(一) jdk,tomcat,nginx记录 最近公司买了三台服务器System x3650 M5用来跑公司的项目.现,记录一下真机部署与后期维护历程~ 因为系统是服务器买来就装好 ...
- Pycharm配置(二)
1.主题 这部分教程主要介绍如何创建一个Python工程并使其具有Pycharm的代码风格.你将会看到Pycharm使你的源码变得非常简洁美观,带有合适的缩进.空格等等,因此Pycharm也是一款代码 ...
- 通过SQL创建一个有主键自动递增有默认值不为空有注释的表
-- create database db_std_mgr_sys; use db_std_mgr_sys; create table student( std_id bigint not null ...
- 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)
框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...
- elasticsearch 源码本地环境搭建
elasticsearch6.0.0 源码本地环境搭建步骤如下: 1.资源准备 ElasicSearch版本:6.0.0: https://github.com/elastic/elasticsear ...
- ArrayList中对象 排序
public class Student implements Comparable { private String studentname; public int studentage; publ ...
- linux下配置Tomcat开机启动
我们在linux下安装好tomcat之后:经常是需要配置到开机启动的: 这样的话就不需要我们每次重启linux服务器之后自己在登陆运行startup.sh文件启动tomcat了 本次的演示环境是在ce ...
- ogg12c_静默安装
1.上传压缩包:123010_fbo_ggs_Linux_x64_shiphome.zip 2.解压: unzip 123010_fbo_ggs_Linux_x64_shiphome.zip 3.配置 ...
- js构建函数优秀案例
这几个效果函数是看到别人写的,挺好的,复制下来学习备用! 函数封装: //var _hmt = _hmt || [];(function() {var hm = document.createElem ...