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. 这是加 ...
随机推荐
- linux应用态下的时间
1.时间值 1.1 日历时间(UTC) 该值是自1 9 7 0年1月1日0 0 : 0 0 : 0 0以来国际标准时间( U T C)所经过的秒数累计值(早期的手册称 U T C为格林尼治标准时间) ...
- MPSOC之7——开发流程uramdisk
用petalinux的预编译目录里有rootfs文件,选择rootfs.tar.gz作为初始输入. 1.原始文件-->uramdisk 1.1 解压原始rootfs.tar.gz,得到若干文件 ...
- 翻译:MariaDB RENAME TABLE语句
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- CenOS 6.5下 mysql自动备份
1.mysql备份命令是mysqldump,自动执行可以用cron,但是文件名需要带有时间标志,shell处理起来很麻烦,我就选择了python来解决 2.文件名用time模块来解决,执行系统命令 ...
- Oracle索引详解
Oracle索引详解(二) --索引分类 Oracle 提供了大量索引选项.知道在给定条件下使用哪个选项对于一个程序的性能来说非常重要.一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程 ...
- linux使用freetds 连接连远程服务器sqlservser2012
1.下载:freetds-patched.tar.gz http://www.freetds.org/software.html http://www.freetds.org/userguide/c ...
- (转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法
转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MA ...
- JaveScript流程控制(JS知识点归纳四)
01 流程控制 顺序结构: 程序的默认执行方式 条件判断语句:也称之为分支结构,选择结构:如果程序要执行的代码出现了多种情况需要使用 循环结构:当代码需要多次重复执行多次时,使用 02 条件判断语句 ...
- [置顶]
echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
echarts x轴标签文字过多导致显示不全 如图: 解决办法1:xAxis.axisLabel 属性 axisLabel的类型是object ,主要作用是:坐标轴刻度标签的相关设置.(当然yAxis ...
- 2018第一发:记一次【Advanced Installer】打包之旅
一.前言 2017年最后几天,你们都高高兴兴的跨年,博主还在加班制作.net安装包.因为年前要出来第一版的安装包,所以博主是加班加点啊.本来想用VS自带的制作工具,不过用过的人都知道,真是非常好(to ...