Java:IO流之转换流

简介:
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 ,如需转载请自行联系原作者
相关文章
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
3月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
3月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
14天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
26天前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
46 2
|
1月前
|
Java
|
2月前
|
存储 自然语言处理 Java
java缓冲流、转换流、序列化流、打印流
java缓冲流、转换流、序列化流、打印流介绍
|
2月前
|
Java 数据处理
如何玩转Java IO?
【2月更文挑战第7天】
218 0
如何玩转Java IO?
|
2月前
|
缓存 分布式计算 Java
Java基础深化和提高-------IO流
Java基础深化和提高-------IO流
108 0