博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java:IO流之转换流
阅读量:7143 次
发布时间:2019-06-29

本文共 3087 字,大约阅读时间需要 10 分钟。

IO流的基本流情况:
字符流:                字符流缓冲区:
FileReader              BufferedReader
FileWriter               BufferedWriter
 
字节流:                字节流缓冲区:
FileInputStream       BufferedInputStream
FileOutputStream     BufferedOutputStream
 
在ReadInDemo.java中通过键盘录入一行的数据并打印其大写,发现其实就是读一行数据的原理。
也就是readLine方法。
能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?
 
readLine方法是字符流BufferedReader的方法
而键盘录入的read方法是字节流BufferInputStream的方法
 
那么能不能将字节流转换为字符流,再使用字符流缓冲区的readLine方法呢?
----------------------------------------------------------------------------------------------
(1)类InputStreamReader:是字节流通向字符流的桥梁
     InputStream in = System.in
     InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
          
(2)类OutputStreamWriter:是字符流通向字节流的桥梁
    OutputStream out = System.out
    OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。
 
//例子1:      
需求:通过键盘录入数据,当录入一行数据后,将就改行数据进行打印,
如果录入的数据是over,那么停止录入
import java.io.*;class TransStreamDemo{    public static void main(String[] args)throws IOException    {        /*        //从键盘录入数据        InputStream in = System.in;                //将字节流对象转换为字符流对象,使用转换流,InputStreanReader        InputStreamReader isr = new InputStreamReader(in);                //为了提高效率,将字符串进行高效技术操作,即创建字符流缓冲区流对象        BufferedReader bufr = new BufferedReader(isr);        */        //上面三个句子简写成:键盘录入最常见写法        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));          // OutputStream out = System.out;        // OutputStreamWriter osr = new OutputStreamWriter(out);        // BufferedWriter bufw = new BufferedWriter(osr);                      //上面三个句子简写成:        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();        }        bufr.close();                      /*        String line = null;        while((line = bufr.readLine())!=null)        {            if("over".equals(line))                break;            System.out.println(line.toString());        }        buf.close();        */    }}
 
改变标准输入输出设备。
在System类中:
static void setIn(InputStream in) 
          重新分配“标准”输入流。 
static void setOut(PrintStream out) 
          重新分配“标准”输出流。 
//例子2:
import java.io.*;class TransStreamDemo2{    public static void main(String[] args)throws IOException    {        //System.setIn(new FileInputStream("ReadInDemo.java"));//修改读取源        //System.setOut(new PrintStream("f:\\myfile\\trans.txt"));//修改打印目的地            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();        }        bufr.close();    }}

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4918556.html
,如需转载请自行联系原作者
你可能感兴趣的文章
IE自动化 二(判断IP所在地)
查看>>
select下拉框多选 和回显
查看>>
苹果允许Flash程序在iPad和iPhone中使用
查看>>
一起谈.NET技术,XML与DataSet对象的关系
查看>>
艾伟_转载:【译】12个asp.net MVC最佳实践
查看>>
MySQL索引
查看>>
flask/sqlalchemy - OperationalError: (sqlite3.OperationalError) no such table
查看>>
每个势利鬼都有一副奴才相
查看>>
LINQ to Object的一个例子
查看>>
在CI框架中如何实现伪静态
查看>>
ORACLE Postgresql中文排序
查看>>
UBOOT到内核到文件系统设置需要注意点
查看>>
卡尔曼滤波简介——4.方差比较
查看>>
mysql -- 预处理语句
查看>>
Silverlight如何调用淘宝API
查看>>
ESP8266- AP模式的使用
查看>>
hdu 1503 LCS输出路径【dp】
查看>>
博客园开张第一天
查看>>
java绘图
查看>>
The Semantic Web, Linked Data and Open Data
查看>>