`
liyanhui
  • 浏览: 347637 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中的字节流和字符流的存储比较

    博客分类:
  • java
阅读更多

引用:http://wuliguo.blog.51cto.com/252985/55742

用几个常用类型的数据来比较字节流和字符流的区别
int a=5;
boolean b=true;
char c='G';
String d="你好";
 
使用字符流打印以上类型的数据到文件中:
PrintWriter dos =new PrintWriter(new BufferedWriter(new FileWriter("c:\\buffertest.txt")));
dos.print(a);
dos.print(b);
dos.print(c);
dos.print(d);
 
结果如下:
a是5
b是true
c是G
d是你好
字符流完全保证了和我们输入的字符保持一致
 
再看看字节流
DataOutputStream dos =new DataOutputStream(new FileOutputStream("c:\\streamtest.txt"));
dos.writeInt(a);
dos.writeBoolean(b);
dos.writeChar(c);
dos.writeUTF(d);
dos.writeChars(d);
dos.writeBytes(d);
 
结果是二进制文件,我们用十六进制编辑器打开它
a是00 00 00 05,int是四个字节
b是01,布尔型变量是一个字节
c是00 47,char是两个字节
d分别用3个不同的函数打印在文件中
第一个是00 06 E4 BD A0 E5 A5 BD,前面的00 06是writeUTF加上去的,是字节的数目,后面六个字节是"你好"的UTF编码,每个汉字3个字节
第二个是4F 60 59 7D,这是"你好"的big endian的Unicode编码,每个汉字2个字节
第三个是60 7D,这是从4F 60 59 7D中分别取得两个汉字的低字节
 
进一步说明
用记事本保存不同的编码文件,文件的头部会有一些标记来识别文件的编码类型,用记事本的另存为就可以保存不同编码类型的文件,然后用记事本打开时就可以正确识别编码,如果用十六进制编辑器打开它们就会看到用来识别编码类型的标记被写在文件头部,这些类型说明如下:
EF BB BF UTF-8
FF FE UTF-16/UCS-2, little endian
FE FF UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.
 
UTF-8保存一个字符时,长度为1-3个字节,也就是8bit-24bit。
其中code<= 007F的,保存为1个字节
(code >= 0080) && (code <= 0x07FF)的,保存为2个字节
code>0800的,保存为3个字节

"你好"的gb2312编码是C4 E3 BA C3,汉字大于0800,所以每个汉字保存为3个字节
 
little endian:低地址存放字节低位,x86是这种顺序
big endian:低地址存放字节高位,网络字节序是这种顺序
分享到:
评论

相关推荐

    Java字符流与字节流区别

    Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理...

    Java字符流和字节流

    ### Java字符流和字节流详解 #### 一、引言 在Java中,I/O流主要用于处理输入输出操作,包括文件读写等。根据处理数据类型的不同,Java I/O流主要分为字节流和字符流两大类。字节流处理的是8位的字节数据,而字符流...

    JAVA_字节流和字符流

    在Java编程语言中,字节流(Byte Stream)和字符流(Character Stream)是处理输入输出数据的两种基本方式。字节流主要用于处理任何类型的二进制数据,如图片、音频、视频等,而字符流则专为处理基于Unicode编码的...

    Java基础11-(字节流、字符流)

    Java的IO流是按照数据的流向分为输入流和输出流,按照数据类型分为字节流和字符流。字节流处理的是二进制数据,适用于任何类型的文件,包括文本文件和非文本文件(如图片、音频、视频等)。字符流则用于处理字符数据...

    Java 字节流、字符流题目.docx

    Java中的流被分为两类:字节流和字符流。字节流处理的是8位的数据,适用于所有类型的数据,包括图像、音频等非文本数据;字符流处理的是16位的Unicode字符,主要用于处理文本数据。 字节流分为输入流和输出流,Java...

    Java字节流 .pdf

    Java字节流是一种用于处理字节数据的流处理机制,在Java中,字节流不包含边界数据的连续流,字节流是由字节组成的,Java里字符由两个字节组成。字节流是最基本的,它是按字节来处理二进制数据。 字节流基类有:字节...

    java 字节流和字符流的区别详解

    在本文中,我们将详细介绍 Java 中的字节流和字符流的区别,并通过示例代码来演示它们的使用。 字节流和字符流的区别: 字节流和字符流的主要区别在于它们操作时是否使用缓冲区。字节流在操作时不会使用缓冲区,...

    IO流学习(字节流 字符流 文本流)!

    总的来说,IO流是Java编程中不可或缺的一部分,理解和熟练运用字节流、字符流和文本流能帮助我们高效地处理数据输入和输出,为各种复杂的应用场景提供支持。在实际开发中,要根据数据类型和需求选择合适的流,并利用...

    详解Java中字符流与字节流的区别

    Java中字符流与字节流的区别 Java中的流是对字节序列的抽象,可以想象有一...Java中的字节流和字符流都是流的基本概念,它们之间的区别在于它们处理的数据单元不同。正确地理解和使用字节流和字符流是java编程的基础。

    详解JAVA 字节流和字符流

    Java字节流和字符流是Java I/O流处理中非常基础且重要的概念,它们是用于文件读写操作的两大类型。Java字节流主要包括InputStream和OutputStream两个基类及其子类,字符流则包括Reader和Writer两个基类及其子类。 ...

    数据流,对象流,字节流,字符流.docx

    根据不同的数据类型和操作方式,I/O流分为多个类别,主要包括数据流、对象流、字节流和字符流。 1. **数据流**: 数据流主要指的是InputStream和OutputStream这两类基本流。InputStream是所有读取数据的流的基类,...

    java字符流操作

    在Java中,字符流分为输入流(InputStreamReader、BufferedReader)和输出流(OutputStreamWriter、PrintWriter),它们提供了高效且方便的字符级数据传输。 1. **InputStreamReader与OutputStreamWriter**: 这两个...

    Java字符流和字节流对文件操作的区别

    Java IO库还提供了链接流(如PipedReader/PipedWriter,PipedInputStream/PipedOutputStream)和缓冲流(BufferedReader/BufferedWriter,BufferedInputStream/BufferedOutputStream),它们分别用于字符流和字节流...

    day20_字节流、字符流、属性集.pdf

    这两个流都有它们的顶级抽象类:字节流的`java.io.InputStream`和`java.io.OutputStream`,以及字符流的`java.io.Reader`和`java.io.Writer`。 字节流是最基础的流类型,它可以处理所有类型的数据,因为所有的数据...

    字节流,字符流,对象流,序列化,持久化

    在Java编程语言中,字节流、字符流、对象流和序列化是处理数据传输和存储的核心概念。这些概念在程序设计中占据了重要的地位,尤其是在处理输入/输出操作时。让我们逐一深入理解这些主题。 首先,字节流(Byte ...

    day09_字节流、字符流2

    Java中的字节流和字符流是处理数据输入输出的核心工具,...以上就是关于Java字节流和字符流的基本操作以及相关练习的解析,它们是Java进行数据I/O操作的基础,理解和掌握这些知识对于进行文件操作和网络通信至关重要。

    java中IO流例子

    IO流分为字节流(Byte Stream)和字符流(Character Stream),它们构成了Java IO系统的基础。 1. **字节流**: - 字节流主要处理单个字节的数据,包括`InputStream`和`OutputStream`两个抽象基类。例如,`...

    Java中字节流与字符流的区别.pdf

    Java中的流API是用于在内存和外部存储之间...综上所述,理解Java中的字节流和字符流的区别对于编写高效的I/O程序至关重要。根据实际需求选择适当的流类型,可以帮助我们更好地处理各种数据并避免可能出现的编码问题。

Global site tag (gtag.js) - Google Analytics