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 ...
随机推荐
- 【设计模式】简单工厂模式 Simple Factory Pattern
简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...
- arcgis api 3.x for js 实现克里金插值渲染图不依赖 GP 服务(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- 一起学Android之ProgressBar
本文简述在Android开发中进度条(ProgressBar)的常见应用,仅供学习分享使用. 概述 在Android开发中,进度条的使用场景有很多,如播放电影时可拖动的观看进度条,评分时使用的评分条, ...
- WebSocket-java实践
websocket 主要用于 前端页面hmtl/jsp 与 后端进行socket得连接. 本例简单实现:一但后端接收到数据或者根据某些规则主动发送数据,那么可以根据不同用户等区别,发送给某个登陆得 ...
- js实现自定义修改网页中表格信息
项目中的打印页面,为提高用户体验,需要增自定修改表格内容的功能,以下是使用示意图(双击td标签部分的内容,可自定义修改): 以下是js插件源码,存为edit.js文件: var tbl, tbt; v ...
- selenium-测试框架搭建(十三)
思路 分离业务代码和测试数据,提高代码可维护性,实现自动化,减少重复劳动. 一个测试框架大概由配置文件,测试数据,测试用例,相关文件(发送邮件等),测试日志,断言和测试报告等模块组成. 结构 以页面为 ...
- TSC条码打印机C#例程(tsclib.dll调用) 【转】
//---- program.cs using System;using System.Collections.Generic;using System.Windows.Forms; using S ...
- IKAnalyzer结合Lucene实现中文分词
1.基本介绍 随着分词在信息检索领域应用的越来越广泛,分词这门技术对大家并不陌生.对于英文分词处理相对简单,经过拆分单词.排斥停止词.提取词干的过程基本就能实现英文分词,单对于中文分词而言,由于语义的 ...
- js用canvans 实现简单的粒子运动
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- SSM —— 注解解析
@Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用. @Controller通过@Controller注解说明该类非 ...