java字节字符转换流操作详解

 更新时间:2019年09月10日 10:19:39   作者:cakincqm  
这篇文章主要介绍了java字节字符转换流操作,结合实例形式详细分析了Java字符流转换相关原理、实现方法及操作注意事项,需要的朋友可以参考下

本文实例讲述了java字节字符转换流操作。分享给大家供大家参考,具体如下:

一 基本概念

1、认识文本和文本文件

java的文本(char)是16位无符号,是字符的unicode编码(双字节编码)
文件是byte byte byte 的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果。

2、字符流(Reader Writer)---操作的都是文本文件

字符的处理:一次处理一个字符
字符的底层任然是基本的字节序列

3、字符流的基本实现

InputStreamReader完成byte流解析未char流,按照编码解析
OutputStreamWriter 提供完成char流到byte流,按照编码处理

4、UE编码查看方法

UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下:

5、Myeclipse编码查看方法

Project->Property->Resource

二 实例

package com.imooc.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class IsrAndOswDemo {
    public static void main(String[] args)throws IOException {
        FileInputStream in = new FileInputStream("e:\\javaio\\test2.txt");
        InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式
        FileOutputStream out = new FileOutputStream("e:\\javaio\\test1.txt");
        OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");
        /*int c ;
        while((c = isr.read())!=-1){
            System.out.print((char)c);
        }*/
        char[] buffer = new char[8*1024];
        int c;
        /*批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个
         返回的是读到的字符的个数
        */
        while(( c = isr.read(buffer,0,buffer.length))!=-1){
            String s = new String(buffer,0,c);
            System.out.print(s);
            osw.write(buffer,0,c);
            osw.flush();
        }
        isr.close();
        osw.close();
    }
}

三 运行结果

中国1jd

四 说明

用UE创建的utf-8和用myeclipse创建的utf-8,文件大小不一样,该程序是用myeclipse创建的utf-8进行测试的。

五 utf-8无bom和utf-8什么区别

utf-8+bom比utf-8多了三个字节前缀:0xEF0xBB0xBF,有这三个字节前缀的文本或字符串,程序可以自动判断它为utf-8格式,并按照utf-8格式来解析文本或字符串,否则,一个文本或者字符串在未知编码的情况下,需要按照字符编码规范去一个个验证

六 utf-8编码说明

https://baike.baidu.com/item/UTF-8/481798?fr=aladdin

七 编码实例

打开”记事本“程序Notepad.exe,新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的”编辑-十六进制函数“,观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。
3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。

更多关于java相关内容感兴趣的读者可查看本站专题:《Java字符与字符串操作技巧总结》、《Java数组操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 一文带你深入了解Guava的缓存机制

    一文带你深入了解Guava的缓存机制

    缓存在现代编程中的作用非常大,它能提高应用性能,减少数据库压力,简直就是性能优化的利器,本文主要来和大家聊聊Google Guava的缓存机制,感兴趣的小伙伴可以了解下
    2023-12-12
  • Java同步容器和并发容器详解

    Java同步容器和并发容器详解

    这篇文章主要介绍了Java同步容器和并发容器详解,容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,下面小编和大家来一起学习下吧
    2019-06-06
  • 浅谈spring中用到的设计模式及应用场景

    浅谈spring中用到的设计模式及应用场景

    下面小编就为大家带来一篇浅谈spring中用到的设计模式及应用场景。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • spring boot 自动更新静态文件和后台代码的实例

    spring boot 自动更新静态文件和后台代码的实例

    下面小编就为大家分享一篇spring boot 自动更新静态文件和后台代码的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Springboot如何读取resources下的json配置文件

    Springboot如何读取resources下的json配置文件

    这篇文章主要介绍了Springboot如何读取resources下的json配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • IDEA下使用MyBatisCodeHelper插件的方法详解

    IDEA下使用MyBatisCodeHelper插件的方法详解

    这篇文章主要介绍了IDEA下使用MyBatisCodeHelper插件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java SimpleDateFormat线程不安全问题

    Java SimpleDateFormat线程不安全问题

    这篇文章详细介绍了如可解决impleDateFormat线程不安全的问题,对多线程问题感兴趣的同学可以参考阅读本文
    2023-03-03
  • SpringBoot整合Redis实现token缓存

    SpringBoot整合Redis实现token缓存

    于token通常会被多次使用,我们需要把它保存到缓存中,以减少频繁地访问数据库,本文主要介绍了SpringBoot整合Redis实现token缓存,感兴趣的可以了解一下
    2024-02-02
  • Java的项目构建工具Maven的配置和使用教程

    Java的项目构建工具Maven的配置和使用教程

    Maven是Java世界中的项目管理和构建自动化工具,基于POM项目对象模型的思想,下面我们就具体来看一下具体的Java的项目构建工具Maven的配置和使用教程:
    2016-05-05
  • JDK8新特性-java.util.function-Function接口使用

    JDK8新特性-java.util.function-Function接口使用

    这篇文章主要介绍了JDK8新特性-java.util.function-Function接口使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论