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缓冲的更多相关文章

  1. Java IO流之【缓冲流和文件流复制文件对比】

    与文件流相比,缓冲流复制文件更快 代码: package Homework; import java.io.BufferedOutputStream; import java.io.File; imp ...

  2. java IO流之三 使用缓冲流来读写文件

    原文:http://blog.csdn.net/haluoluo211/article/details/52183219 一.通过BufferedReader和BufferedWriter来读写文件 ...

  3. 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】

    day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...

  4. File类与常用IO流第八章——缓冲流

    第八章.缓冲流 缓冲流概述 缓冲流,也叫高效流,是对4个基本的FileXxx流的增强.按照数据类型分为4类:   输入缓冲流 输出缓冲流 字节缓冲流 BufferedInputStream Buffe ...

  5. IO流——常用IO流详解

    1:字节流 字节流:用于处理以字节为单位的二进制文件(如音乐,图片等) InputStream 是抽象类 它的对应子类FileInputStream可以被实例化 构造方法: FileInputStre ...

  6. io流(io流的引入与文件字节流)

    io流的引入与文件字节流 io流:就是一根吸管,插入后,可以操作目标文件 io流的分类: 按方向:输入,输出 按大小:字节,字符 按处理方式: 处理流:"管套着管" --- 流结合 ...

  7. Java IO流之字符缓冲流

    字符流: 1.加入字符缓存流,增强读取功能(readLine) 2.更高效的读取数据 BufferedReader 从字符输入流读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取. FileRe ...

  8. (18)IO流之字节缓冲路

    缓冲流 BufferedInputStream 缓冲输入流 前面的练习告诉我们使用缓冲数组读取的效率更高,为了方便的大家的操作,sun 位大家提供了一个缓冲输入字节流对象,让我们可以更高效率的读取文件 ...

  9. AJPFX总结IO流中的缓冲思想

    缓冲思想   (因为内存的运算速度要远大于硬盘的原酸速度,所以只要降低硬盘的读写次数,就可以提高效率)    1. 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,    2. 这是加 ...

随机推荐

  1. sublime text 3配置使用python

    1. 在sublime text的官网下载,是适合自己系统的版本.官网地址:https://www.sublimetext.com/3 2. 安装好后,在菜单栏打开:Preferences---> ...

  2. WCF系统内置绑定列表与系统绑定所支持的功能

      WCF系统内置绑定列表 绑定 配置元素 说明 传输协议 编码格式 BasicHttpBinding <basicHttpBnding> 一个绑定,适用于与符合 WS-Basic Pro ...

  3. spring boot利用swagger和spring doc生成在线和离线文档

    参考博客地址: 在线文档:http://blog.didispace.com/springbootswagger2/ 离线文档:http://www.jianshu.com/p/af7a6f29bf4 ...

  4. VM环境下Linux虚拟机扩展存储空间操作方法总结

    用VMwareware虚拟机安装的 Linux 系统剩余空间不足,造成软件无法正常安装.如果重新装一遍系统就需要重新配置好开发环境和软件的安装配置. 一.空间扩展  (1)打开VMware,选择Edi ...

  5. C#中&与&&的区别

    c#&是什么意思? 看过一些文章,关于这个的简单而容易被忽略的语法,说的总有点瑕疵. 贴代码15秒之内应该能知道c#中一个&和两个&&的区别,开始计数了........ ...

  6. 用node搭建简单的静态资源管理器

    我们都知道,老牌的3p服务器都是自带静态资源管理器的.但是node不同,它没有web容器,它的路由地址和真实地址可以没有联系,所有node的优点,是可以把路由做得相当漂亮. 但静态资源管理器也是必不可 ...

  7. lesson - 14 linux系统日常管理3

    1. Linux系统服务管理工具ntsysv 类似图形界面管理工具,如果没有该命令使用 yum install -y ntsysv 安装常用服务:crond, iptables, network, s ...

  8. 阅读MDN文档之基本盒模型(三)

    Box properties Margin collapsing Adjacent siblings(相邻兄弟) Parent and first/last child Empty blocks Ac ...

  9. 为什么说Python 是大数据全栈式开发语言

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...

  10. angularjs 怎么获取鼠标焦点 鼠标移入显示浮动的div提示框

    首先,我们要清楚几个基础的知识,angular的两个鼠标移入移出的指令------ng-mouseover(鼠标移入)ng-mouseleave(鼠标移出)--------还有就是window.eve ...