37字符流

发布时间:2022-06-29 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了37字符流脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1.1 为什么会出现字符流【理解】

  • 字符流的介绍 由于字节流操作中文不是特别的方便,所以Java就提供字符流 字符流 = 字节流 + 编码表
  • 中文的字节存储方式 用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接 成中文,如何识别是中文的呢? 汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数

1.2 编码表【理解】

  • 什么是字符集 是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等 l计算机要准确的存储和识别各种字符集符号,就需要进行字符编码,一套字符集必然至少有一套字符编码。 常见字符集有ASCII字符集、GBXXX字符集、Unicode字符集等

  • 常见的字符集

    • ASCII字符集: lASCII:是基于拉丁字母的一套脑编码系统,用于显示现代英语,主要包括控制字符(回车键、退格、换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号) 基本的ASCII字符集,使用7位表示一个字符,共128字符。ASCII的扩展字符集使用8位表示一个字符,共256字符,方便支持欧洲常用字符。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等
    • GBXXX字符集: GBK:最常用的中文码表。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等
    • Unicode字符集: UTF-8编码:可以用来表示Unicode标准中任意字符,它是电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持
    • UTF-8编码。它使用一至四个字节为每个字符编码编码规则: 128个US-ASCII字符,只需一个字节编码 拉丁文等字符,需要二个字节编码 大部分常用字(含中文),使用三个字节编码 其他极少使用的Unicode辅助字符,使用四字节编码

1.3 字符串中的编码解码问题【应用】

方法名 说明
byte[] getBytes() 使用平台的默认字符集将该 String编码为一系列字节
byte[] getBytes(String charsetName) 使用指定的字符集将该 String编码为一系列字节
String(byte[] bytes) 使用平台的默认字符集解码指定的字节数组来创建字符串
String(byte[] bytes, String charsetName) 通过指定的字符集解码指定的字节数组来创建字符串
public class ConversionStreamDemo {
    public static void main(String[] args) throws IOException {
        //OutputStreamWrITer osw = new OutputStreamWriter(new
        FileOutputStream("myCharStream\osw.txt"));
        OutputStreamWriter osw = new OutputStreamWriter(new                                  FileOutputStream("myCharStream\osw.txt"),"GBK");
        osw.write("中国");
        osw.close();
        
        
        //InputStreamReader isr = new InputStreamReader(new
        FileinputStream("myCharStream\osw.txt"));
        InputStreamReader isr = new InputStreamReader(new
                   FileInputStream("myCharStream\osw.txt"),"GBK");
        //一次读取一个字符数据
        int ch;
        while ((ch=isr.read())!=-1) {
            System.out.PRint((char)ch);
        } i
            sr.close();
    }
}

1.4 字符流中的编码解码问题【应用】

  • 字符流中和编码解码问题相关的两个类
    • InputStreamReader:是从字节流到字符流的桥梁 它读取字节,并使用指定的编码将其解码为字符 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
    • OutputStreamWriter:是从字符流到字节流的桥梁 是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
InputStreamReader(InputStream in) 使用默认字符编码创建InputStreamReader对 象
InputStreamReader(InputStream in,String charset) 使用指定的字符编码创建InputStreamReader 对象
OutputStreamWriter(OutputStream out) 使用默认字符编码创建OutputStreamWriter对 象
OutputStreamWriter(OutputStream out,String charset) 使用指定的字符编码创建OutputStreamWriter 对象
public class ConversionStreamDemo {
    public static void main(String[] args) throws IOException {
        //OutputStreamWriter osw = new OutputStreamWriter(new
        FileOutputStream("myCharStream\osw.txt"));
        OutputStreamWriter osw = new OutputStreamWriter(new
    			 FileOutputStream("myCharStream\osw.txt"),"GBK");
        osw.write("中国");
        osw.close();
        
        
        //InputStreamReader isr = new InputStreamReader(new
        FileInputStream("myCharStream\osw.txt"));
        InputStreamReader isr = new InputStreamReader(new
                 FileInputStream("myCharStream\osw.txt"),"GBK");
        //一次读取一个字符数据
        int ch;
        while ((ch=isr.read())!=-1) {
            System.out.print((char)ch);
        } i
            sr.close();
    }
}

1.5 字符流写数据的5种方式【应用】

方法名 说明
void write(int c) 写一个字符
void write(char[] cbuf) 写入一个字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的一部分
void write(String str) 写一个字符串
void write(String str, int off, int len) 写一个字符串的一部分
  • 刷新和关闭的方法
方法名 说明
flush() 刷新流,之后还可以继续写数据
close() 关闭流,释放资,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据
/*
    构造方法:
        OutputStreamWriter​(OutputStream out):创建一个使用默认字符编码的OutputStreamWriter

    写数据的5种方式:
        void write​(int c):写一个字符
        void write​(char[] cbuf):写入一个字符数组
        void write​(char[] cbuf, int off, int len):写入字符数组的一部分
        void write​(String str):写一个字符串
        void write​(String str, int off, int len):写一个字符串的一部分
 */

public class OutputStreamWriterDemo {
    public static void main(String[] args) throws IOException {
        //OutputStreamWriter​(OutputStream out):创建一个使用默认字符编码的OutputStreamWriter
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\osw.txt"));

        //void write​(int c):写一个字符
//        osw.write(97);
//        void flush():刷新流
//        osw.close();


        //void write​(char[] cbuf):写入一个字符数组
        char[] chs = {'a', 'b', 'c', 'd', 'e'};
//        osw.write(chs);

        //void write​(char[] cbuf, int off, int len):写入字符数组的一部分
//        osw.write(chs, 1, 3);

        //void write​(String str):写一个字符串
//        osw.write("abcde");

        //void write​(String str, int off, int len):写一个字符串的一部分
        osw.write("abcde", 1, 3);

        //释放资源
        osw.close();
        //Exception in thread "main" java.io.IOException: Stream closed
//        osw.write(100);
    }
}


1.6 字符流读数据的2种方式【应用】

方法名 说明
int read() 一次读一个字符数据
int read(char[] cbuf) 一次读一个字符数组数据
public class InputStreamReaderDemo {
    public static void main(String[] args) throws IOException {
        InputStreamReader isr = new InputStreamReader(new
			 FileInputStream("myCharStream\ConversionStreamDemo.java"));
        //int read():一次读一个字符数据
        // int ch;
        // while ((ch=isr.read())!=-1) {
        // System.out.print((char)ch);
        // }
        //int read(char[] cbuf):一次读一个字符数组数据
        char[] chs = new char[1024];
        int len;
        while ((len = isr.read(chs)) != -1) {
            System.out.print(new String(chs, 0, len));
        } /
            /释放资源
            isr.close();
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的37字符流全部内容,希望文章能够帮你解决37字符流所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。