`

文本文件和二进制文件区别及java中字节流和字符流归纳

    博客分类:
  • JAVA
阅读更多
首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的形式存放于存储介质中,他们的区别只是逻辑上的区别,这两种方式只是在编码层次上有差别。文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。

对于读到的二进制流的解释方式可以分为按文本方式和按二进制方式打开,按文本方式比如ASCII码形式解释,就把读到的二进制流每8比特8比特的翻译,存储是反过程,如果按照二进制的方式打开,则没有任何编码解码的过程。

一:c的文本读写和二进制读写基本没有区别,只是文本读写会对回车换行进行转化,二进制读写不会有转化的过程。

二:Java提供了很多进行文件输入输出的类,这些类可以分为文本I/O类和二进制I/O类。文本I/O将数据解释成字符的序列,二进制I/O将数据解释成原始的二进制数。文本在文件中如何存储依赖于文件的编码方式。Java对文本I/O提供自动编码与解码

在文本文件中存储的数据是以人能读懂的方式表示的,而在二进制文件中存储的数据是用二进制形式来表示的。人读不懂二进制文件,它们是为程序读取而设计的。例如,Java源程序存储在文本文件中,可以使用文本编辑器阅读,但是Java的类存储在二进制文件中,使用Java虚拟机阅读。二进制文件的好处是处理它们的效率比文本文件高

文本文件是字符的序列构成的,二进制文件是由位的序列构成的。例如,十进制整数199在文本文件中是以三个字符序列‘1’、‘9’、‘9’来存储的,而在二进制文件中它是以byte类型的值C7存储的

1、文本输入输出

C#用于文本输入输出的类:StreamReader/streamWriter

Java用于文本输入输出的类:

Reader:一个读取字符的抽象基类

Writer:一个向文件中写入字符的抽象基类

FileReader:以主机上默认的编码方式从文件中读取字符的类

FileWriter:以主机上的默认编码方式向文件中写入字符的类

BufferedReader:一个从缓冲区读取字符的类

BufferedWriter:一个向缓冲区写入字符的类

PrintWriter:以文本方式输出基本类型值、字符和字符串

PrintStream:与PrintWriter类似,只是向控制台输出

PrintWriter类和PrintSream类可以将对象、字符串和数值以文本的方式输出

out是定义在System类中类型为PrintStream的一个静态变量。默认情况下,out表示标准输出设备,也就是屏幕。可以使用System.setOut(PrintStream)设置新的out

InputStreamReader类:以指定的编码方案从文件中读取字符的类

OutpitStreamWriter类:以指定的编码方案向文件中写入字符的类

InputStreamReader类和OutpitStreamWriter类用于实现字符和字节之间的转化。写入OutpitStreamWriter的字符用指定的编码方案翻译为字节,同样,从InputStreamReader类读出的字符用指定的编码方案解码为字符。可以使用InputStreamReader类和OutpitStreamWriter类的构造函数指定编码方案,如果没有指定它,采用系统默认的编码方案

InputStreamReader类和OutpitStreamWriter类的getEncoding()方法返回这个数据流使用的编码方案名称

java程序使用的是统一码(Unicode),从FileReader流中读取一个字符时,返回该字符的统一码。字符在文件中的编码可能不是统一码,Java自动将统一码转换为文件指定的编码

2、二进制输入输出

文本输入输出需要进行编码与解码操作,向文件写入字符时,Java虚拟机将输出字符的统一码转化为文件指定的编码,对应地,从文件读取字符时,将文件中指定的编码转化为统一码。二进制输入输出不要求这些转化,向文件写入字节,就是将源字节复制到文件中,从文件读取字节,就是将文件中的字节原样返回

例如,假设使用文本I/O将字符‘9’写入文件。由于字符‘9’的统一码是0x0039,所以会根据文件的编码方案将统一码为0x0039转化成新的编码。如果用二进制I/O将一个值存入文件,那么该整数在内存中的精确值被复制到文件中

由于二进制I/O不需要编码和解码,所以要比文件I/O效率高。二进制文件与主机的编码方案无关,因而是可移植的,所以Java程序可以在任何机器上访问Java程序创建的二进制文件。这也是把Java的类文件存储为二进制文件的原因,因为Java类文件可以在任何具有Java虚拟机的机器上运行

C#二进制输入输出的类:FileStream

Java用于二进制输入输出的类:

InputStream:用于字节输入流的抽象基类

OutputStream:用于字节输出流的抽象基类

FileInputStream:一个从文件读取字节的类

FileOutputStream:一个向文件写入字节的类

DataInputStream:用于读取基本类型数据值和字符串的类

DataOutputStream:用于输出基本类型数据值和字符串的类

BufferedInputStream:一个从缓冲区读取字节的类

BufferedOutputStream:一个向缓冲区内写入字节的类

FilterInputStream类和FilterOutputStream类:

过滤器数据流是为某种目的过滤字节的数据流。基本字节数如流提供的读取方法只能用来读取字节。如果想要读取整数值、双精度值或字符串,需要一个过滤器类来包装输入流。使用过滤器类就可以读取整数值双精度值或字符串,而不仅仅是字节或字符

DataInputStream扩展了FilterInputStream类并实现了DataInput接口,实现了定义在DataInput接口中读取基本类型值和字符串的方法

DataOutputStream扩展了FilterOutputStream类并实现了DataOutput接口,实现了定义在DataOutput接口中输出基本类型值和字符串的方法

3、小结

从本质上说所有文件都是二进制文件,文本I/O是在二进制I/O基础上提供的一层抽象,它封装了字符的编码和解码过程。在文本I/O中自动进行编码与解码。对于二进制输入,要想能够以正确的类型和正确的顺序读取,并须准确地了解数据是如何让写入的

将一个字节写入字节流时,字节的确切值发送到输出流。将一个字符写入字符流时,字符按照编码方案转换成它对应的数值。

从字节流中读取一个字节时,是从输入流读出一个字节的值。而从字符流中读取一个字符时,读取稽几个字节依赖于编码系统

ACSII码占8位,Java使用的是16位的Unicode码。当一个统一码无法转换为ACSII码时,转换为字符‘?’。例如,如果想把统一码‘u03b1’写到字符流中,送入到字符流的是数值63(表示字符‘?’)。

文本文件依赖于主机所使用的编码系统,所以将一个文本文件从一台机器转到另一台机器上时,如果两台机器的编码不同,可能会出现错误

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yunyun050924/archive/2010/12/16/6080291.aspx

分享到:
评论

相关推荐

    java 将文件中二进制文件转换成文本文本文件并输出

    在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...

    文本文件与二进制文件

    "文本文件与二进制文件的差异和应用" 文本文件和二进制文件是计算机存储中的两种基本文件类型。它们的区别不在于物理存储,而在于逻辑上的编码方式不同。文本文件是基于字符编码的文件,常见的编码有 ASCII 编码、...

    文本文件和二进制文件区别读写.rar

    在计算机编程中,文本文件和二进制文件是两种常见的数据存储形式,它们在读写方式上有着显著的差异。本文将深入探讨这两种文件类型及其在C语言中的处理方法。 首先,文本文件是以人类可读的形式存储数据的,通常...

    文本文件转换二进制文件

    文本文件以人类可读的字符编码(如ASCII或Unicode)存储数据,而二进制文件则包含机器可理解的一系列比特(0和1)序列。本文将深入探讨文本文件转换为二进制文件的过程,以及为何需要进行这种转换。 1. **文本文件*...

    【博客 Java调用MATLAB,将文件转换为二进制流】java+matlab程序

    这篇博客“Java调用MATLAB,将文件转换为二进制流”详细介绍了如何利用Java调用MATLAB的功能来处理文件,将其转换为二进制流。这种技术在数据处理、文件传输或存储等领域非常有用,因为二进制格式可以更高效地处理...

    C语言实现文本文件/二进制文件格式互换

    本程序要自己创建个文本格式的输入文件a1.txt,编译后能将文本文件前255字节以内的字符转换成相应的AscII码值的二进制表示,并存入输出文件a2.txt中。然后再将二进制文件还原并存入a3.txt文件。 具体代码如下: #...

    二进制文件转换成文本文件,16进制显示.py

    二进制文件srcfile 转换成文本文件 targetfile,16进制显示。 二进制文件srcfile 转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件,16进制显示...

    判断文件是文本文件还是二进制文件

    在计算机领域,文件可以分为两种主要类型:文本文件和二进制文件。了解如何区分这两种文件类型对于数据处理和程序开发至关重要。文本文件通常由可读的字符组成,如ASCII编码,而二进制文件则包含机器可理解的原始位...

    C++文件转二进制,二进制转文件

    在C++编程中,将文件转换为二进制和从二进制还原文件是一项常见的任务,特别是在处理图像、音频、视频和其他数据时。这个过程涉及到读取文件内容并将其存储为二进制数据,以及从二进制数据中恢复原始文件。在VS2010...

    二进制文件转换为文本文件的工具

    一个很有用的工具,可以将二进制文件转换为文本文件

    文件转换为二进制流

    文本字符串与byte[], 整个物理文件与byte[], 物理文件内容与byte[], stream与byty[] 之间的相互转换。 从磁盘读取文件,将文件写入磁盘。

    文本文件与二进制文件的详细解释

    虽然从编程角度看,无论是文本还是二进制文件,底层都是0和1的序列,但在读写时,文本文件需要考虑字符编码,而二进制文件则直接处理字节数据。 总之,文本文件和二进制文件各有千秋,选择哪一种取决于具体的应用...

    JavaScript读二进制文件并用ajax传输二进制流的方法

    在JavaScript中,处理二进制文件并使用Ajax传输二进制流是一项常见的任务,尤其是在进行文件上传或数据传输时。由于浏览器之间的差异,实现这一功能需要考虑不同的API和兼容性问题。以下是一份详细的指南,涵盖了...

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

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

    文本文件转换成二进制文件

    在IT领域,文本文件和二进制文件是两种常见的数据存储格式。文本文件通常使用ASCII或Unicode编码,可被人类直接阅读,而二进制文件则包含机器可读的0和1,通常用于高效的数据存储和传输。在这个场景中,我们要讨论...

    otxt2bintxt2otxt.rar_二进制 文本_文本文件 二进制 文件

    在IT领域,文本和二进制文件是两种基本的数据存储形式。"otxt2bintxt2otxt.rar_二进制 文本_文本文件_二进制 文件"这个压缩包涉及了将文本文件与二进制文件之间相互转换的过程。这种转换在计算机科学和编程中具有...

    将文件上传、下载(以二进制流保存到数据库)实现代码

    在讨论如何将文件上传、下载并以二进制流的方式保存到数据库中时,首先需要了解几个关键概念:文件上传、文件下载、二进制流以及数据库操作。 文件上传通常指的是将本地或者网络上的文件通过网络上传到服务器。在...

    hex文件转二进制工具

    在电子工程和嵌入式系统开发领域,HEX文件和二进制文件是常见的程序存储格式。它们分别代表了十六进制表示的ASCII文本和直接可烧录到硬件的二进制数据。HEX文件通常由编译器或集成开发环境(如Keil)生成,其中包含...

    MFC读取二进制文件并保存为文本文件

    1:本程序读取二进制文件,并把读到的二进制文件保存为文本数据 2:二进制文件内容一系列的三维点云数据,由扫描仪器扫描获得 3:本程序采用了多线程技术,读取二进制文件时,界面不会卡顿 4:实例二进制文件为data....

    二进制文件To文本转换器

    在IT领域,我们经常需要处理各种类型的文件,其中包括二进制文件和文本文件。二进制文件通常包含非打印字符,直接阅读困难,而文本文件则以人类可读的字符编码存储信息。"二进制文件To文本转换器"就是一个解决这种...

Global site tag (gtag.js) - Google Analytics