首页 > 编程知识 正文

java 字符流,java中io流详解

时间:2023-05-06 11:02:50 阅读:160242 作者:3073

Java IO——字节流和字符流之间的详细比较概述大多数APP应用程序都需要在设备之间传输数据。 Java将这种不同输入/输出设备(例如输入设备、内存、显示器、网络等)之间的数据传输抽象为“流”,程序允许通过流向输入/输出设备传输数据所有Java流都位于Java.IO包中,称为输入/输出流。 IO流,即输入输出的缩写。

Java IO库有两个子系统。

面向字节流的InputStream和面向输出流字符的Reader和Writer java流在处理上分为字符流和字节流。 其实字节流的InputStream和OutputStream是一切的基础。 只有字节流流向实际的总线。 要获取字符流,必须对字节流进行特殊解码。 在Java中,负责从字节解码为字符流的桥梁是输入流和输入流。

在字节流字符串流的许多情况下,字节是数据的最小基本单位,1 byte=8 bit,1 char=2 byte=16 bit。

流中的所有数据都作为流传输或存储。 当程序需要数据时使用输入流读取数据,当程序需要存储一些数据时使用输出流完成。 程序内的输入输出全部作为流保存,保存在流中的实际上全部是字节文件。

Java流是字节数组的抽象,可以想象有自来水管。 但是,现在流到自来水管的已经不是水了,而是字节数组。 与水流一样,Java流也有“流动方向”,可以读取字节序列的对象通常称为输入流。 可以向其中写入字节序列的对象称为输出流。

输入流是相对于程序的,从外部向程序发送数据需要输入流,程序向外部发送数据需要输出流。

字节流Java字节流处理的最基本单位是一个字节,通常用于处理二进制数据。 Java最基本的两个字节流类是InputStream和OutputStream,它们分别表示最基本的输入和输出字节流。 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先,并且是抽象类。

字节流缺省情况下不支持缓存。 字节流在操作时不使用缓冲区(内存),而是由文件本身直接操作。 这意味着每次调用read方法时,都要求操作系统读取字节,并且经常涉及磁盘IO,因此效率很低。 要使用内存缓冲区提高读取效率,必须使用缓冲输入流。

使用缓冲输出流输出数据时,如果没有关闭流,则不会将数据输出到文件。 这意味着,并不是所有的字节流都不会用于缓冲区。 输入缓冲流缓冲输入流和输出缓冲流缓冲输出流用于缓冲区。

字符流Java处理字符流的最基本单元是用于处理文本数据(如字符、字符数组和字符串)的Unicode符号(大小为2字节)。 缺省情况下,Java字符串类型使用Unicode规则对字符进行编码并存储在内存中。 由于磁盘上存储的数据通常有多种编码方式,最终输出的字节内容因编码方式而异,因此读取和写入字节流时必须设置适当的编码方式。

为了实际上在输出前完成unicode符号序列向对应的编码方式的字节序列的变换,使用存储缓冲器来存储变换后的字节序列,在变换完成后一起写入盘文件

所有文件的保存都是字节(byte )的保存,保存到磁盘的不是文件中的字符,而是将字符编码为字节,然后将这些字节保存到磁盘。 读取文件,特别是文本文件时,也是一次读取一个字节以形成字节列。

字节流和字符流区别字节流操作的基本单位是字节; 字符流操作的基本单位是Unicode符号。

字节流默认不使用缓冲区; 字符流使用缓冲区。

字节流在操作时不使用缓冲器,而是直接与文件本身进行操作,因此字节流在操作文件时,即使不关闭资源也能够输出文件; 字符流在操作时用于缓冲区。 如果字符流没有调用close或flush方法,则不会输出任何内容。

字节流常用于处理二进制数据,实际上可以处理任意类型的数据,但不支持直接写入或读取Unicode元件。 字符流通常处理文本数据,并支持unicode符号的写入和读取。

字节流可用于任何类型的对象,包括二进制对象,但字符流只能处理字符或字符串。 字节流提供处理所有类型I/o操作的功能,但不能直接处理Unicode字符。 字符流是可能的。

字节流和字符流的转换字节流是最基本的,所有InputStream和OutputStream子类主要用于处理二进制数据。 虽然是按字节处理,但实际上很多数据都是文本,还提出了字符流的概念。 它以虚拟机的encode为单位进行处理,并进行字符集转换。 在这两者之间从input字节流转换为字符流时,byte[]实际上转换为String,而字符流转换为字节流时,实际上转换为String

化为byte[]时。

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

字节流与字符流主要的区别是他们的的处理方式。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。