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 ...
随机推荐
- java基础(四):谈谈java中的IO流
1.字节流 1.1.字节输出流output 1.1.1.数据写入文件中 通过api查找output.找到很多,其中java.io.OutputStream,OutputStream: 输出字节流的超类 ...
- Linux使用nginx反向代理。可实现域名指向特定端口
在配置80指向域名的时候出现端口占用,使用kill -9无法杀死端口,应使用下面的命令来杀死进程killall -9 nginx(使用完本命令需要再把配置过的配置文件重新启动.命令写在了PS下面)后在 ...
- Structs2 中拦截器获取请求参数
前言 环境:window 10,JDK 1.7,Tomcat 7 测试代码 package com.szxy.interceptor; import java.util.Map; import jav ...
- lua_local变量在new时不会被清空
前言 我的运行环境 Lua5.3 按照我们以往的Java或C#编程经验,如果一个class被new,那么这个class中所有成员变量的值都是默值或是构造函数中赋的值,但在Lua中的local变量却并不 ...
- MATLAB中“fitgmdist”的用法及其GMM聚类算法
MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...
- Java基础系列--01_基础类型
J2SE.J2ME.J2EE分别指什么? J2SE 基础版,桌面应用. J2ME 微型版,手机开发.(android,ios) J2EE 企业版,所有浏览器访问的应用程序. 注意:JDK5以后改名 J ...
- 《JAVA程序设计》_第九周学习总结
一.学习内容 1.数据库的建立.配置 在官网先下载好MySQL.navicat for MySQL.XAMPP.MySQL-connecter 在XAMPP中点击start开启MySQL 在navic ...
- 北京大学冯哲清北学堂讲课day1
贪心方案: 答案是第三个策略 二分的一个重点是有顺序性,只有满足这个件才可以二分判断区间,否则你得自己构造顺序. 洛谷跳石头同题: 首先,我们要最小化最大跳远距离 代码如下(此题) #include& ...
- Centos7安装配置Nginx
Nginx 安装 系统平台:CentOS 7.4 64位. 一,安装编译工具及文件 yum -y install make zlib zlib-devel gcc-c++ libtool openss ...
- SQL操作符、通配符等
一.通配符 常用模糊查询:% SELECT * FROM TB_Name WHERE FIELD LIKE pattern SELECT * FROM Persons WHERE name LIK ...