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. sqlser 2005 对称加密,非对称加密笔记

    一:对称加密  原始明文---密钥---加密数据---密钥---原始明文 速度快,通过算法将明文混淆,占用系统资源少 二:非对称加密 加密解密速度慢,较高的系统资源占用 三:混合数据加密 加密过程:随 ...

  2. 538. Convert BST to Greater Tree

    Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...

  3. 使用requests爬取猫眼电影TOP100榜单

    Requests是一个很方便的python网络编程库,用官方的话是"非转基因,可以安全食用".里面封装了很多的方法,避免了urllib/urllib2的繁琐. 这一节使用reque ...

  4. 原生JavaScript实现一个简单的todo-list

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  5. Raspberry Pi中可用的Go IDE:liteide

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } Raspberry Pi中可用的Go IDE:liteide p { margin- ...

  6. VS访问不到TFS、VS连接TFS报TF30063

    =============================================== 20170704_第一次修改                       ccb_warlock === ...

  7. sourcetree跳过注册的方法

    当前只有Win的版本,Mac自行百度(笑) 很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作. 然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作 ...

  8. JMeter 插件管理

    JMeter管理的插件包括了jmeter-plugins.org上常用的插件以及各种第三方插件和JMeter核心插件. JMeter插件管理器主要管理插件安装,卸载,升级等操作. 安装插件管理 1.下 ...

  9. Webpack 2 视频教程 020 - Webpack 2 中的 HMR ( Hot Module Replacement )

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  10. Webpack 2 视频教程 015 - Webpack 2 中的文件压缩

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...