`

18章-Java I/O 系统 & 编码问题

阅读更多

一、Java编码相关的概念

二、InputStream 和 OutputStream 的类别

 

一、Java编码相关的概念

Java编码的概念可以从下面5点来理解和分析

1、文本文件存放在系统中的是某一编码方式下该字符串的编码

2、内存中的字符串是以字符数组的形式存储:char[],其中字符数组中存储的内容为Unicode编码,既UTF-16编码

3、ISO8859-1 进行解码不会有信息丢失,但是对一些类似包含中文的char[]编码会有信息丢失。因为

      ISO8859-1 编码将字节数组解码为字符串的时候是一个字节一个字节进行解码的所以不会有信息丢失,当对包含中文的char[]数组进行编码的时候,由于中文的Unicode编码超出了ISO8859-1编码的范围(因为UTF-16编码是用两个字节,而ISO8859-1是用一个字节编码),所以会将超出范围的字符编码为?字符,这样就照成信息丢失。

4、字符在进行转换的时候都是以Unicode作为中介的,例如:需要将ISO8859-1编码的字符串转换成UTF-8编码的字符串,需要先将该字符串转换成Unicode字符串,然后在转换成UTF-8编码的字符串。如下图:



5、Unicode(统一码,万国码,单一码) 是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码。所以个人认为当使用InputStream 操作文本时,获取到的是文本某一编码方式下的字符集编码的字节数组。使用reader操作文本时是在InputStream获取到的字节数组解码后的字符串,只是解码用的编码如果没有具体指定的话,就会采用操作系统编码。

6、编码:将UTF-16编码转换成某一特定编码

7、解码:将某一特定编码转换成UTF-16编码

8、字符串在内存中是以字符数组的形式存储:char[],其中字符数组中存储的内容为Unicode编码,既UTF-16编码。所以内存中的字符串都是以UTF-16的编码形式存在的,只有在通过String.getBytes()的时候,才会将UTF-16编码的字节数组转换成某一特定编码的字节数组形式。所以只有byte[ ] 中的内容才是特定字符集的编码,而普通的字符串在程序和内存中都是UTF-16编码,明确这一点很重要。

 

二、InputStream 和 OutputStream 的类别

1、InputStream的作用是用来表示那些从不同数据源产生输入的类

2、OutputStream决定了输出所要去往的目标:字节数组(但不是String,不过你当然可以用字节数组自己创建),文件或管道。

如下表描述了InputStream和OutputStream的类别和对应关系

InputStream 类  功能 OuputStream 类  功能
       
       
       
       
       
       

 

分享到:
评论

相关推荐

    CIS355-Java:CIS355-Java编码分配

    CIS355-Java CIS355-Java编码分配实验1:使用Java评估表达式,转义序列和文本的基本练习实验2:演示使用类来创建和对象,使用mutator和accessor方法以及在两个不同文件中的两个不同类之间传递值实验3:练习使用循环...

    Thinking in java4(中文高清版)-java的'圣经'

    类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java...

    java源码无lib文件夹-j-webp:用于GoogleWebP图像格式的Java图像I/O读取器和写入器

    I/O reader 和 writer for Google WebP image 格式分叉,没有系统 lib 文件。 在源程序中,编码人员需要将 .so/.dll/.dylib 等原生 lib 文件放入java.library.path文件夹中。 为了更容易使用,qwong/j-webp(基于 ...

    encoding-protecting-java:用于编码和保护ASCII文本的Java类Hamming Huffman

    文件-对系统磁盘进行I / O操作 BitInputStream-允许从File中使用的二进制文件中一点一点地读取 BitOutputStream-允许按位写入二进制文件 LetterNode-Tree的LetterNode(?// *修复 CodeNode-表的节点(?// *修复

    JAVA_API1.6文档(中文)

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    java_diary_18.rar_JFC_swing_反射机制_国际化 java

    j2se 18天笔记是根据网络上资料而制作成的CHM帮助文档 ...Day13:I/O流的类与编码方式 Day14:优化的I/O流与网络编程 Day15:网络编程与常用类库 Day16:国际化与新特性 Day17:新特性与并发线程 Day18:软件开发流程

    java nio中文版

    java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...

    java深度历险

    序 1 目录 2 JAVA字节代码的操纵 4 动态编译JAVA源文件 4 ...JAVA I/O 45 流 45 缓冲区 47 字符与编码 48 通道 49 参考资料 52 JAVA安全 53 认证 53 权限控制 55 加密、解密与签名 57 安全套接字连接 58 参考资料 59

    json-io:提供JSON IO实用程序以保留UTF-8编码的Java库

    JSON I / O是一个Java库,提供通用的JSON I / O实用程序来保留UTF-8编码。 它包括一些实用程序,例如将输入流转换为UTF-8 JSON对象,将JSON文件转换为UTF-8 JSON对象以及将JSON对象输出为UTF-8文件。 以UTF-8模式...

    java面试题大全--java基础,struts,spring,ejb等

    6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的...

    Java I/O输入输出流详解

    一、文件的编码  开发时一定要注意项目默认的编码!!!!!!!!  文件操作的时候一定要记得关闭!!!!!!!!  ASCII:美国标准信息交换码,用一个字节的7位可以表示一个字符  ISO8859-1:拉丁码表,...

    java jdk-api-1.6 中文 chmd

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    Java SpringBoot课件+源码视频教程

    12、_SpringBoot_配置-properties配置文件编码问题 13、_SpringBoot_配置-@ConfigurationProperties与@Value区别 14、_SpringBoot_配置-@PropertySource、@ImportResource、@Bean 15、_SpringBoot_配置-配置文件...

    Java技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计.zip

    算法: 剑指 Offer 题解 ...Java I/O 系统设计: 系统设计基础 分布式 集群 攻击技术 缓存 消息队列 面向对象: 面向对象思想 设计模式 工具: Git Docker 构建工具 正则表达式 编码实践: 代码可读性 代码风格规范

    关于编码问题的深度解析

    编码问题的产生其实都是I/O操作导致的问题,也就是说所有I/O存在的地方就有可能会出现编码问题。所以要想深度解析编码问题,我们就必须回到源码的实现机制,找到I/O操作中可能导致乱码的操作(行为)。我们知道I/O有...

    Java 1.6 API 中文 New

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。...

    java api最新7.0

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。...

    netty权威指南第2版

    第1章 Java的I/O演进之路 第2章 NIO入门 第3章 Netty入门应用 第4章 TCP粘包/拆包问题解析之道 第5章 分隔符和定长解析码器的应用 第6章 编码技术 第7章 MessagePack 编解码 第8章 Google Protobuf编解码 第9章 ...

    JavaAPI1.6中文chm文档 part1

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

Global site tag (gtag.js) - Google Analytics