首先我们先来了解一些IO流基本知识。

一,基本知识概括

具体的IO流有很多种,针对不同的应用场景应该使用相应的流对象。但怎么确定应该使用哪个IO流对象呢?

一般要有四个明确:

1)明确源和目的

源:InputStream Reader

目的: OutputStream Writer

2)明确是否纯文本数据(Reader和Writer只能处理纯文本数据)

源:是:Reader

否:InputStream

目的:是:Writer

否:OutputStream

3)明确具体的设备

源:

a.硬盘 File

b.键盘 System.in

c.内存 数组容器

d.网络 Socket流

目的:

a.硬盘 File

b.控制台 System.out

c.内存 数组

d.网络 Socket流

4)是否需要额外功能

a.提高效率

加缓存区

b.需要转换

加上转换流

二,转换流

缓存技术我的上一篇文章有讲到过,那么什么是转换流?具体又什么作用呢?

我们知道System.in是一个一个字节进行接收,这样的操作效率很慢,为了加快操作速度可以将字节流转换成字符流,这样就可以按行操作。对应的类为:

InputStreamReader 字节流转化成字符流,此外该对象还可以指定特定的编码集

那么,我们的输出对象System.out也是按字节流进行输出,那么在输出的时候,就需要将读入的字符流转换成字节流再传给out进行输出。对应的类为;

OutputStreamWriter 字符流转换成字节流,此外该对象还可以指定特定的编码集

另外,在加上缓存技术,提高效率,具体的IO流输入和输出方向可以形象的用下图表示:

三,应用示例

需求描述:

* 获取用户的键盘输入

* 将数据变成大写显示在控制台上

* 如果用户输入的是over,结束键盘输入

private static void readEff() throws IOException {
/*InputStream in = System.in;
InputStreamReader inr = new InputStreamReader(in);//将字节流转换成字符流
BufferedReader br = new BufferedReader(inr);//加入缓存技术,提高读取效率
OutputStream out = System.out;
OutputStreamWriter ow = new OutputStreamWriter(out);//将字符流转换成字节流
BufferedWriter bw = new BufferedWriter(ow);//加入缓存技术,提高输出效率*/
//更简洁的写法
/*
* 另外可以根据输入输出的源头,替换相应的输入输出对象
* 需求1,将键盘输入写入到文本文件中
* 需求2,将文件中的数据输出到控制台
*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//需求2,System.out=>new FileInputStream("xx.txt")
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//需求1.System.out=>new FileOutputStream("xx.txt") String line = null;
while((line=br.readLine())!=null) { if("over".equals(line))
break; bw.write(line.toUpperCase());
bw.newLine();
bw.flush(); } }

最后,美景来一张,Life is beautiful!

Java:IO流-流的操作规律和转换流的更多相关文章

  1. java IO之 编码 (码表 编码 解码 转换流)

    编码 什么是编码? 计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a  1 等字符 计算机中是没有存储字符的,但是我们却看到了.计算机在存储这些信息的时候,根据一个有规 则 ...

  2. Java IO流详解(六)——转换流

    转换流也是一种处理流,它提供了字节流和字符流之间的转换.在Java IO流中提供了两个转换流:InputStreamReader 和 OutputStreamWriter,这两个类都属于字符流.其中I ...

  3. Java第三阶段学习(五、流的操作规律、Properties流、序列化流与反序列化流、打印流、commons-IO jar包)

    一.流的操作规律 四个明确: 明确一:明确要操作的数据是数据源还是数据目的地 源:InputStream   Reader 目的地:OutputStream Writer 先根据需求明确是要读还是写 ...

  4. Java IO详解(六)------随机访问文件流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  5. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类

  6. Java IO详解(七)------随机访问文件流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  7. Java基础(二十八)Java IO(5)RandomAccessFile类与过滤器流(Filter Stream)

    一.RandomAccessFile类 使用RandomAccessFile类可以读取任意位置数据的文件. 1.构造方法 RandomAccessFile(String name, String mo ...

  8. Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)

    关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...

  9. IO流(三)__字节流 标准输入输出流 转换流

    一.字节流:FileInputStream 和FileOutputStream 基本操作和字符流类相同,没有flush,但是close还是要的 复制一个字节流文件 private static voi ...

随机推荐

  1. 微信小程序 canvas 绘制圆形状

    page({ // 绘制canvas drawCanvas:function(){ const ctx = wx.createCanvasContext('poster') // 画圆形二维码 thi ...

  2. vue学习之vuex

    1  首先还是安装 npm install vuex --save. 2 在src这种创建目录为store 创建 index.js  (getters.js ,actions.js ,mutation ...

  3. Django 传递额外参数及 URL别名

    传递额外参数到视图函数中 在 urls.py 文件中添加下面内容 from django.conf.urls import url urlpatterns = [ url(r'index', view ...

  4. git创建分支并提交到远程分支

    来自:https://www.cnblogs.com/bluestorm/p/6252900.html 侵删 git branch(分支命令的使用http://hbiao68.iteye.com/bl ...

  5. [笔记]记录原开发工作在base命名空间下扩展的属性与方法

    前言 该笔记只是为了记录以前开发使用的方式. 处理命名空间namespace /** * 处理命名空间 * @param {string} 空间名称,可多个 * @return {object} 对象 ...

  6. C#中USB转串口的拔插捕获

    // usb消息定义 public const int WM_DEVICE_CHANGE = 0x219; public const int DBT_DEVICEARRIVAL = 0x8000; p ...

  7. memcached架构及缓存策略

    ----------------------------------------概述---------------------------------------- Memcached是一套高性能分布 ...

  8. 当锚点遇到fixed

    问题:页面内容导航fixed+锚点错位 solution: 锚点定位跟外边距没有关系. 我们使用内边距padding-top=fixed导航高度来使锚点可以精准定位: 此时新的问题产生了,内边距的存在 ...

  9. CMake与Make最简单直接的区别 [转]

    写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器连接目标代码生成可执行文件,如.exe. 但如果源文件太多,一个一个编译时就会特别麻烦 ...

  10. 逆向-攻防世界-no-strings-attached

    看题目就知道查找不到关键字符串,为防止踩坑,strings命令查看,没有找到有用的字符串.IDA载入程序查找入口函数, main函数中有4个函数,经过分析判断authenticate()为关键函数,跟 ...