直接上码:
 
读取键盘录入数据代码演示:
 

import java.io.IOException;
import java.io.InputStream; /**
*读取键盘录入的数据,并打印在控制台上。
*
*键盘本身就是一个标准的输入设备,
*对于Java而言,
*/
public class ReadKey { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// readKey();
readKey_2();
} public static void readKey() throws IOException {
InputStream in = System.in; int ch = in.read();
System.out.println(ch);
int ch1 = in.read();
System.out.println(ch1);
int ch2 = in.read();
System.out.println(ch2); } /**
* 获取用户键盘录入的数据,
* 并将数据变成大写显示在控制台上,
* 如果用户输入的是over,则结束键盘录入
*
* 思路:
* 1,因为键盘录入只读取一个字节,要判断是否是over,需要先将读到的字节拼成字符串
* 2,那就需要一个容器。可以使用StringBuilder
* 3,在用户回车之前将录入的数据变成字符串判断即可。
* @throws IOException
*/
public static void readKey_2() throws IOException {
//创建容器
StringBuilder sb = new StringBuilder();
//获取键盘读取流
InputStream in = System.in;
//定义变量记录读取到的字节,并循环读取。
int ch = 0;
while((ch = in.read())!=-1){
//在存储之前需要判断是否是换行标记,因为换行标记不存
if(ch == '\r')
continue;
if(ch == '\n'){
String temp = sb.toString();
if("over".equals(temp))
break;
System.out.println(temp.toUpperCase());
sb.delete(0,sb.length());
}else{
sb.append((char)ch);
}
}
}
}

  

流转换:
    字节流转换成字符流InputStreamReader
 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; public class TransStreamDemo { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//字节流
InputStream in = System.in;
//将字节转换成字符的桥梁,即转换流。
InputStreamReader isr = new InputStreamReader(in); //字符流
BufferedReader bufr = new BufferedReader(isr);
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
System.out.println(line.toUpperCase());
}
}
}

  

    字符流转换成字节流OutputStreamWriter

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter; public class TransStreamDemo { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//字节流
InputStream in = System.in;
//将字节转换成字符的桥梁,即转换流。
InputStreamReader isr = new InputStreamReader(in); //字符流
BufferedReader bufr = new BufferedReader(isr); OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw); String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}

  

        代码重写
 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; public class TransStreamDemo { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}

  

        复制文件代码演示
 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; public class TransStreamDemo { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
}

  

转换流总结:
    InputStreamReader : 字节到字符的桥梁,解码
    OutputStreamWriter : 字符到字节的桥梁,编码
流的操作规律:
    首先需弄清楚操作规律的原因是:流的对象太多啦,往往不知道用哪一个对象合适。
    想要知道对象开发时用到哪些对象,只要通过四个条件去明确即可。
 
1, 明确源和目的(汇)
    源:InputStream 和 Reader
    目的:OutputStream 和 Writer
2,明确数据是否是纯文本数据。
    源:
            是纯文本:Reader
            不是纯文本:InputStream
    目的:
            是纯文本:Writer
            不是纯文本:OutputStream
此时就明确了需要使用哪个体系
 
3,明确具体的设备
    源设备:
            硬盘:文件File
            键盘:System.in
            内存:数组
            网络:Socket流
    目的设备:
            硬盘:文件File
            控制台:System.out
            内存:数组
            网络:Socket流
 
4,是否需要其他额外功能。
    1)是否需要高效(缓冲区)
            是就加上Buffer
    2)转换
    ......
 
 
 
使用转换流的常见场景:
    1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换流作为桥梁,提高对本文操作的便捷
    2,操作文本涉及到具体的指定编码表时,必须使用转换流。
 
 
 

Java之IO转换流的更多相关文章

  1. java 输入输出IO 转换流-字符编码

    编码和其产生的问题: 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字.英文.标点符号.汉字等字符是二进制数转换之后的结果. 按照某种规则,将字符存储到计算机中,称为编码 .反之,将存 ...

  2. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  3. IO 转换流

    package TestIo; import java.io.*; /** * 转换流 */ public class TestConvertStream { public static void m ...

  4. Java基础 使用转换流进行文件的复制 / RandomAccessFile 类进行文件的复制

    笔记:  **使用转换流进行文件的复制 文本文件---字节流FileInputStream--> [InputStreamReader] -----字符流BufferedReader------ ...

  5. 【转载】Java IO 转换流 字节转字符流

    字节流输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| FileInputStream 读取文件的输入字节流.----------- ...

  6. java基础 关于转换流

    转换流有两种:InputStreamReader:将字节流转换为字符流 OutputStreamWriter:将字符流转换为字节流 什么时候使用转换流?由以下分析: 流对象很多,首先要明确那个流对象. ...

  7. 15、IO (转换流、缓冲流)

    转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指定的 ...

  8. JAVA基础之转换流和缓冲流

    个人理解: 在理解的字符流和字节流的区别后.要是想读取指定的编码格式的文件时,特别是不是默认的格式时,就需要转换流了,需要注意的是字符流是需要清除缓冲区的:当需要快速的进行读取时,则需要缓冲流.存在即 ...

  9. java基础(24):转换流、缓冲流

    1. 转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputS ...

随机推荐

  1. freemarker该阵列

    freemarker该阵列 1.设计思路 (1)声明一个数组 (2)打印数组中的元素 2.设计源代码 <#--freemarker数组--> <#assign nums=[12,34 ...

  2. 设计模式之前奏(UML类图)

    原文:设计模式之前奏(UML类图) 本人菜菜一个,最近一直在博客园游走闲逛,看到了各种技术,各种各种…….便看到了大话设计模式这本书,下了电子版的看了看第一章,感觉相当不错,不仅通俗易懂,而且与实际案 ...

  3. Unity3d C# Socket 下载文件 (同步到)

    续篇 Unity3d C# HttpWebRequest 异步下载文件 ,由于project编译为IL2CPP的情况下仍然无效.提示HttpWebrequest 在当前版本号不支持.所以还是寻求其他的 ...

  4. Html5响应式设计与实现广场

    由于提出的想法响应式设计,越来越多的网站使用这样的思想.各类大型网站如雨后春笋般涌了出来.例如:小米商城.天猫等. 至于响应式设计的概念等大家能够去百度百度,我这里就不相信解说了.直接为大家带来源代码 ...

  5. 鸟哥Linux私房菜 基础学习篇读书笔记(10):Linux磁盘和文件系统管理(3)

    本文总结了Linux操作系统来管理我们的硬盘和文件系统需要使用命令.当我们在系统中增加一个硬盘驱动器.什么是我们需要去通过这个硬盘就可以真正使用步骤?下面步骤: (1)对磁盘进行分区,新建能够使用的分 ...

  6. WPF学习(6)路由事件

    做过.net开发的朋友对于事件应该都不陌生.追溯历史,事件(Event)首先应用在Com和VB上,它是对在MFC中使用的烦琐的消息机制的一个封装,然后.net又继承了这种事件驱动机制,这种事件也叫.n ...

  7. 《Programming Hive》读书笔记(一)Hadoop和hive环境搭建

    <Programming Hive>读书笔记(一)Hadoop和Hive环境搭建             先把主要的技术和工具学好,才干更高效地思考和工作.   Chapter 1.Int ...

  8. 走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串

    原文:走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串 对大量数据进行查询时,可以应用到索引技术.索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有 ...

  9. CCFadeOut ,CCFadeIn 不能使用的原因

    CCFadeOut *action = CCFadeOut::create(0.5f);  image->runAction(action); 截取部分代码.以上是我写游戏时候遇到的问题代码, ...

  10. opencv-阈值处理

    从原理:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/threshold/threshold.html 目标: ...