转换流: InputStreamReader 和 OutputStreamWriter

/*
* 1、转换流: InputStreamReader 和 OutputStreamWriter 一对。
*
* 1) InputStreamReader 字节转换成字符的一个输入流,最后,以字符方式读取数据。
* OutputStreamWriter 字符转换成字节的一个输出流,最后,以字节方式输出数据。
*
* 2) 功能: 当给的类型数据与要的类型数据不一致时,需要进行转换。
* 另一个功能: 可以为输入/输出指定字符编码集,从而以指定的字符编码集实现数据存盘管理或读取相应字符编码集的文件。
*
* 3) 案例1: 通过 FileInputStream类的对象去读取带汉字的文件内容并显示在屏幕时会乱码。
* 如何解决这个问题?
* 答案: 通过InputStreamReader转换流来实现。 或者更换FileInputStream为FileReader类实现读取。
*
* 4) 案例2:通过FileOutputStream类的对象把汉字存盘到文件中时会失真。
* 如何解决这个问题?
* 答案: 通过 OutputStreamWriter转换流来实现。 或者更换为FileWriter类实现存盘。
*
*/

public static void main(String[] args) throws FileNotFoundException, IOException {

        String path  = "d:/chars.txt";
        //saveFile( path );

        //String path = "e:/javaex623/BreakTest.java";

        readFile( path );
    }

    //解决FileInputStream类的对象在读取汉字并显示时乱码理解
    public static void readFile( String path ) throws FileNotFoundException , IOException {
        FileInputStream  fis = null;
        InputStreamReader  isr = null;

        try {
            fis = new FileInputStream( path );
            isr = new InputStreamReader( fis , "utf-8"); //将fis文件的字节输入流转换成字符输入流。

            int x = isr.read(); //fis.read();
            while( x != -1 ){
                System.out.print( (char) x  );

                x = isr.read(); //fis.read();
            }

            System.out.println("\n读取完毕。");

        } finally {
            if( isr != null )
                isr.close();

            if( fis != null )
                fis.close();
        }
    }

    //解决用FileOutputStream对汉字存盘时失真现象
    public static void saveFile( String path ) throws FileNotFoundException , IOException {
        FileOutputStream  fos = null;
        char[] chs = {‘欢‘,‘迎‘,‘你‘,‘们‘,‘来‘,‘到‘,‘尚‘,‘学‘,‘堂‘,‘学‘,‘习‘,‘!‘};

        OutputStreamWriter  osw = null;

        try {
            fos = new FileOutputStream( path );

            //将给定的字符转换成字节,再以字节流方式输出到fos文件的字节输出流中。即:最后以字节方式存盘。
            osw = new OutputStreamWriter( fos , "utf-8" );  //在存盘时,以"UTF-8"字符编码集来管理文字

            for(int i = 0; i < chs.length;  i++ ){
                osw.write( chs[i] );  //fos.write( chs[i] );
            }

            osw.flush(); //fos.flush();

            System.out.println("\n已将 " + Arrays.toString( chs ) + " 存盘到 " + path + "文件中了。");
        }finally {
            if( osw != null )
                osw.close();
            if( fos != null ){
                fos.close();
            }
        }

    }

package com.bjsxt.d821;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class ReadHomePageTest {
    public static void main(String[] args) {
        URL  obj = null;
        InputStreamReader  isr = null;

        try {
            obj = new URL( "http://www.baidu.com" );

            isr = new InputStreamReader( obj.openStream() , "utf-8");

            int x = isr.read();
            while( x != -1 ){
                System.out.print( (char)x  );
                x = isr.read();
            }

            System.out.println("\n读取 百度主页内容完毕。 ");

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                isr.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

时间: 2024-12-15 01:37:22

转换流: InputStreamReader 和 OutputStreamWriter的相关文章

转换流--InputStreamReader ,OutputStreamWriter

BufferedReader 字符流,只能装饰字符流,不能装饰字节流.有个重要且好用的方法是readLine()整行读取字符. 但是InputStream是字节流,没有resdLine方法,那么字节流InputStream如何使用readLine方法呢??? 如果能把字节流转换成字符流就可以使用BufferedReader装饰流.也就可以使用readLine方法. 把字节流转换成字符流,或者把字符流转为字节流    称为转换流: InputStreamReader(前缀是功能,后缀是体系):字节

转换流InputStreamReader、OutputStreamWriter

InputStreamReaderDemo: 1 import java.io.*; 2 //为方便演示便省略异常处理. 3 class SystemDemo2 4 { 5 public static void main(String[] args)throws IOException 6 { 7 InputStream in = System.in; 8 InputStreamReader ins = new InputStreamReader(in); 9 BufferedReader bu

io流之转换流InputStreamReader、OutputStreamWriter

例子程序: package io; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; p

理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,BufferedInputStream 和 BufferedOutputStream, BufferedReader 和 BufferedWriter,转换流

/* * 1.理解 "流" ? * 动态性.连续性.方向性. * * 2.在java语言中,将数据的输入/输出称之为 IO流. IO流的分类: * 1) 从方向分: 输入流 , 输出流. (参照计算机的内存) * 将数据送到内存中去称之为输入流.反之,称之为输出流. * * 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据). * * 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上). * * 3.在Java语言中,所有流类均来自

Java IO(四)- 转换流

转换流 InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换. InputStreamReader需要和InputStream套接(把InputStream转换成InputStreamReader) OutputStreamWriter需要和OutputStream套接(把OutputStreamWriter转换成OutputStream) 转换流在构造时可以指定其编码集合,例如: InputStream is = new InputStrea

黑马程序猿——26,基本数据操作流,字节数组操作流,转换流,编码表

-----------android培训.java培训.java学习型技术博客.期待与您交流! ------------ 黑马程序猿--26, DataInputStream,DataOutputStream, ByteArrayInputStream,ByteArrayOutputStream, InputStreamReader,OutputStreamWriter,编码表 /* DataInputStream和DataOutputStream 能够更加操作基本数据类型的流 注意这里是Dat

黑马程序员——26,基本数据操作流,字节数组操作流,转换流,编码表

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 黑马程序员--26, DataInputStream,DataOutputStream, ByteArrayInputStream,ByteArrayOutputStream, InputStreamReader,OutputStreamW

【IO流】22 - 字符流 - 转换流OutputStreamWrite和InputStreamReader

转换流 InputStreamReader package cn.itcast.demo; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; /* * 转换流 * java.io.InputStreamReader 继承 Reader * 字符输入流,读取文本文件 * * 字节流向字符的桥梁,将字节流转字符流 * * 读取的方法: * read() 读取1个字

JavaIO流学习总结-InputStreamReader和OutputStreamWriter基本操作练习

package io; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter; /* * 修改日期:2020/04/05 * 修改人:牟松 * 字符流InputStr