关闭

字符流与字节流的转换

114人阅读 评论(0) 收藏 举报

字节流转字符流

字符流和字节流是根据处理数据的不同来区分的。字节流按照8位传输,字符流按照16位传输 
由于字符流使用Unicode字符集,支持多国文字,因此若流要跨越多种平台传输,应使用字符流。

一、InputStreamReader类

InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。

构造方法:

InputStreamReader isr = new InputStreamReader(InputStream in);//构造一个默认编码集的InputStreamReader类

InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//构造一个指定编码集的InputStreamReader类。

参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。

                                或者    InputStream in = new FileInputStream(String fileName);//读取文件中的数据。可以看出FileInputStream 为InputStream的子类。

InputStreamReader(InputStream in)//根据默认字符集创建

InputStreamReader(InputStream in,Charset cs)//使用给定字符集创建

InputStreamReader(InputStream in,CharsetDecoder dec)//使用给定字符集解码器创建

InputStreamReader(InputStream in,String charsetName)//使用指定字符集创建



主要方法:int read();//读取单个字符。

                  int read(char []cbuf);//将读取到的字符存到数组中。返回读取的字符数。

 

二、OutputStreamWriter类

OutputStreamWriter 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。

构造方法:

OutputStreamWriter osw = new OutputStreamWriter(OutputStream out);//构造一个默认编码集的OutputStreamWriter类

OutputStreamWriter osw = new OutputStreamWriter(OutputStream out,String charsetName);//构造一个指定编码集的OutputStreamWriter类。

参数 out对象通过 InputStream out = System.out;获得。//打印到控制台上。

                               或者    InputStream out = new FileoutputStream(String fileName);//输出到文件中。可以看出FileoutputStream 为outputStream的子类。

OutputStreamWriter(outputstream out)//根据默认的字符集创建

OutputStreamWriter(outputstream out,charset cs)//使用给定的字符集创建

OutputStreamWriter(outputstream out,charsetDecoder dec)//使用组定字符集创建

OutputStreamWriter(outputstream out,String charsetName)//使用指定字符集创建


主要方法:void write(int c);//将单个字符写入。

                  viod write(String str,int off,int len);//将字符串某部分写入。

                  void flush();//将该流中的缓冲数据刷到目的地中去。

例子:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class KeyinTest {
    public static void main(String[] args) {
        try (
                //将System.in转化为Reader对象  
                InputStreamReader reader = new InputStreamReader(System.in);
                //将普通的Reader包装成BufferReader  
                BufferedReader br = new BufferedReader(reader);
        ) {
            String buffer = null;
            //采用循环方式来逐行读取数据  
            while ((buffer = br.readLine()) != null) {
                //如果读取的是"exit"则程序退出  
                if (buffer.equals("exit")) {
                    System.exit(1);
                }
                //打印读出的内容  
                System.out.println("输入的内容为:" + buffer);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}  


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2958次
    • 积分:127
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:14篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论