Java:IO流-流的操作规律和转换流
首先我们先来了解一些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流-流的操作规律和转换流的更多相关文章
- java IO之 编码 (码表 编码 解码 转换流)
编码 什么是编码? 计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a 1 等字符 计算机中是没有存储字符的,但是我们却看到了.计算机在存储这些信息的时候,根据一个有规 则 ...
- Java IO流详解(六)——转换流
转换流也是一种处理流,它提供了字节流和字符流之间的转换.在Java IO流中提供了两个转换流:InputStreamReader 和 OutputStreamWriter,这两个类都属于字符流.其中I ...
- Java第三阶段学习(五、流的操作规律、Properties流、序列化流与反序列化流、打印流、commons-IO jar包)
一.流的操作规律 四个明确: 明确一:明确要操作的数据是数据源还是数据目的地 源:InputStream Reader 目的地:OutputStream Writer 先根据需求明确是要读还是写 ...
- Java IO详解(六)------随机访问文件流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- java IO之 File类+字节流 (输入输出 缓冲流 异常处理)
1. File类
- Java IO详解(七)------随机访问文件流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- Java基础(二十八)Java IO(5)RandomAccessFile类与过滤器流(Filter Stream)
一.RandomAccessFile类 使用RandomAccessFile类可以读取任意位置数据的文件. 1.构造方法 RandomAccessFile(String name, String mo ...
- Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)
关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...
- IO流(三)__字节流 标准输入输出流 转换流
一.字节流:FileInputStream 和FileOutputStream 基本操作和字符流类相同,没有flush,但是close还是要的 复制一个字节流文件 private static voi ...
随机推荐
- 微信小程序 canvas 绘制圆形状
page({ // 绘制canvas drawCanvas:function(){ const ctx = wx.createCanvasContext('poster') // 画圆形二维码 thi ...
- vue学习之vuex
1 首先还是安装 npm install vuex --save. 2 在src这种创建目录为store 创建 index.js (getters.js ,actions.js ,mutation ...
- Django 传递额外参数及 URL别名
传递额外参数到视图函数中 在 urls.py 文件中添加下面内容 from django.conf.urls import url urlpatterns = [ url(r'index', view ...
- git创建分支并提交到远程分支
来自:https://www.cnblogs.com/bluestorm/p/6252900.html 侵删 git branch(分支命令的使用http://hbiao68.iteye.com/bl ...
- [笔记]记录原开发工作在base命名空间下扩展的属性与方法
前言 该笔记只是为了记录以前开发使用的方式. 处理命名空间namespace /** * 处理命名空间 * @param {string} 空间名称,可多个 * @return {object} 对象 ...
- C#中USB转串口的拔插捕获
// usb消息定义 public const int WM_DEVICE_CHANGE = 0x219; public const int DBT_DEVICEARRIVAL = 0x8000; p ...
- memcached架构及缓存策略
----------------------------------------概述---------------------------------------- Memcached是一套高性能分布 ...
- 当锚点遇到fixed
问题:页面内容导航fixed+锚点错位 solution: 锚点定位跟外边距没有关系. 我们使用内边距padding-top=fixed导航高度来使锚点可以精准定位: 此时新的问题产生了,内边距的存在 ...
- CMake与Make最简单直接的区别 [转]
写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器连接目标代码生成可执行文件,如.exe. 但如果源文件太多,一个一个编译时就会特别麻烦 ...
- 逆向-攻防世界-no-strings-attached
看题目就知道查找不到关键字符串,为防止踩坑,strings命令查看,没有找到有用的字符串.IDA载入程序查找入口函数, main函数中有4个函数,经过分析判断authenticate()为关键函数,跟 ...