zoukankan      html  css  js  c++  java
  • 转换流

    转换流包括字符编码和字符集

    字符编码和字符集
    字符编码是计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数
    转换之后的结果,按照某种规则,将字符储存到计算机中,称为编码,放置,将存储在计算机中的二进制数按照某种规则
    解析显示出来,称为解码,比如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号,反之,按照A规则存储
    ,在按照B规则解析,就会导致乱码现象
    编码:字符->字节
    解码:字节->字符
    字符编码:就是一套自然语言的字符与二进制之间的对应规则
    编码表:生活中文字和计算机中二进制的对应规则
    字符集:也叫编码表,是一个系统支持的所有字符的集合,包裹各国家文字、标点符号、图形符号、数字等
    计算机要准确的储存和识别各种字符集符号,需要进行字符编码,一套字符集必然至少有一套字符编码。常见字符集有
    ASCII字符集,GBK字符集,Unicode字符集等

    编码引出的问题
    在一些软件中编码与windows系统的默认编码不是同一编码就会出现乱码问题
    在windows系统中默认的编码是GBK编码,在IDEA中默认使用的是UTF-8编码所以就会出现乱码问题

    解决乱码问题
    就需要用到转换流InputStreamReader与OutStreamWriter,因为
    FileReader只能查询默认码表,如果文件格式与编译器默认的编码不一样,那么就会出现乱码问题


    OutStreamWriter

    /*
    java.io.OutStreamWriter extends Writer
    OutStreamWriter:是字符流通向字节流的桥梁:可使用指定的charset将要写入流中的字符编码成字节,
    继承自父类的共性成员方法:
        void write(int c)写入单个字符
        void write(char[] chuf)写入字符数组
        abstract void write(char[] chuf,int off,int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数
        void write(String str)写入字符串
        void write(String str, int off, int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数
        void flush()刷新该流的模块
        void close()关闭此流,但要先刷新
    
        构造方法:
            OutStreamWriter(OutputStream out)  创建使用默认字符编码的 OutStreamWriter
            OutStreamWriter(OutputStream out, String charsetName)      创建使用指定字符集的 OutStreamWriter
            参数:
                OutputStream out:字节输出流,可以用来写转换之后的字节到文件中
                String charsetName:指定的编码表名称,不区分大小写
        使用步骤:
            创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称
            使用OutputStreamWriter对象中的方法Write,把字符转换为字节存储到缓冲区中
            使用OutputStreamWriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中
            资源释放 */
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    
    
    public class OutputStreamWrite {
        public static void main(String[] args) throws IOException{
            write_utf_8();
        }
    
        /* 使用转换流写utf-8格式的文件 */
        private static void write_utf_8() throws IOException{
                OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("1.txt"),"utf-8");
                osw.write("你好");
                osw.flush();
                osw.close();
        }
    }

     InputStreamRead

    /*
    InputStreamReader
    java.io.InputStreamReader extends Reader
    InputStreamReader 是字节流通向字符流的桥梁,他使用指定的charset读取字节并将其编码为字符
    继承自父类的共性方法:
        int read()读取单个字节并返回
        int read(char[] chuf)一次读取多个字符,将字符读入数组
        void close() 关闭该流并释放与之相关的所有资源
    构造方法
        InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader
        InputStreamReader(InputStream in,String charsetName) 创建使用指定字符集的 InputStreamReader
        参数:
            InputStream in: 字节输入流,用来读取文件中保存的字节
            String charsetName:指定的编码表名称,不区分大小写
        使用步骤
            创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
            使用InputStreamReader对象中的方法read读取文件
            释放资源
        注意事项
            构造方法中指定的编码表名称要和文件的编码相同,否则会发生乱码
    */
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class DemoInputStreamRead {
        public static void main(String[] args) throws IOException{
            read_utf_8();
        }
    private static void read_utf_8() throws IOException{
        InputStreamReader isr = new InputStreamReader(new FileInputStream("1.txt"),"utf-8");
        int len = 0;
        while((len = isr.read())!=-1){
            System.out.println((char)len);
        }
        isr.close();
    }
    
    }
  • 相关阅读:
    spring mvc给参数起别名
    聊聊分布式定时任务中间件架构及其实现--转
    Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
    终端安全工具 gartner 排名
    When Cyber Security Meets Machine Learning 机器学习 安全分析 对于安全领域的总结很有用 看未来演进方向
    DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网
    DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp
    DNS隧道工具汇总——补充,还有IP over DNS的工具NSTX、Iodine、DNSCat
    Data Mining and Machine Learning in Cybersecurity PDF
    ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
  • 原文地址:https://www.cnblogs.com/zhao-yang/p/14223766.html
Copyright © 2011-2022 走看看