「javaio字节流」java 字节流 字符流

博主:adminadmin 2023-03-19 20:19:07 262

今天给各位分享javaio字节流的知识,其中也会对java 字节流 字符流进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

字节流的基本操作

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。可以通过下图表示输入和输出的关系。

在java.io中流的操作主要有字节流、字符流两大类,均有输入和输出操作。字节流中输出数据主要使用OutputStream类完成,输入使用的是InputStream类。字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。

1.字节输出流

字节流主要操作byte类型数据,以byte数组为准,主要操作类是OutputStream类和InputStream类。

OutputStream类是一个抽象类,如果要使用此类,则首先必须通过子类实例化对象。如果现在要操作的是一个文件,则可以使用FileOutputStream类,通过向上转型后,可以为OutputStream实例化。

范例: 向文件中写入字符串

程序运行结果:

内容已成功地写入到文件中,以上程序在实例化、写、关闭时都有异常发生,为了方便起见,直接在主方法上使用throws关键字抛出异常,可以减少try...catch语句。

2.追加新内容

在之前的所有操作中,如果重新执行程序,肯定会覆盖文件中的已有内容,此时可以通过FileOutputStream向文件中追加内容,FileOutputStream的另外一个构造方法如下:

如果将append的值设置为true,则表示在文件的末尾追加内容。

范例: 修改之前的程序,追加文件内容

程序运行结果

可以发现,每次执行后,内容会自动追加到文件的末尾。

3.字节输入流InputStream

既然可以用程序向文件中写入内容,那么也可以通过InputStream从文件中把内容读取进来。InputStream类和OutputStream类一样本身也是一个抽象类,必须依靠其子类。如果从文件中读取,子类肯定是FileInputStream。

FileInputStream类的构造方法如下:

范例: 从文件中读取内容

程序运行结果:

内容为:Hello World!!!Hello World!!!

文件的内容已经被读取出来,但是后面有很多个空格,这是因为开辟的byte数组大小为1024,而实际的内容只有28个字节,在这之后存在 996个空白的空间,在将byte数组变为字符串时也将这996个无用的空间转为字符串,这样不仅浪费空间,也不合理。可以使用read()方法上的返回值,此返回值表示向数组中写入了多少个数据。

范例: 修正以上错误

程序运行结果:

此时的程序已不再产生多余的空格,因为在程序最后输出时将byte数组指定范围中的内容变成了字符串。

除以上方法外,也可以通过循环从文件中一个个地把内容读取出来,直接使用read()方法即可。

范例: 使用read()通过循环读取

程序运行结果:

以上程序是在明确知道具体数组大小的前提下开展的,如果此时不知道要输入的内容有多大,则只能通过判断是否读到文件末尾的方式来读取文件。能否有根据内容大小自调整的方法?

范例: 另一种方式的读取

程序运行结果:

文件读到末尾,则返回的内容为-1。因此当temp接收到的内容为-1时,输入流的内容也读到底,才会返回-1,通过-1可以判断输入流中是否还有其他内容。

java io字符流和字节流的区别

Java字符流是处理字符(Char)对象用的,字节流是处理字节(Byte)对象用的。处理的目标对象不同,处理方法也就不一样了。

字符流处理的基本单位是字符(Java中的字符是16位的),输入流以Reader为基础,输出流以Writer为基础;

字节流的基本单位是字节(Java中的字节是8位的),输入流以

InputStream为基础,输出流以

OutputStream为基础;

字符流在输入时可以按字符读取,也可以按行读取,会去掉回车换行,常用于读取字符数据;

而字节流按字节读取,不作任何处理,常用于读取二进制数据。

Java中的字符在内部都是使用Unicode进行表示的,因此,要正确读取字符数据,需要知道字符的编码字符集,字符流提供编码字符集的指定,如果不指定使用系统默认的方式对字符数据进行编码转换,这个编码字符集不正确,会造成读进来的地字符出现乱码。

字节流虽然是读取二进制数据用的,但也可以读取字符文件,按字节进行处理,读进来之后可以根据编码字符集进行转换,也可以变成字符串。

java IO输入输出流中的各种字节流,字符流类,我需要都记住吗,还是只要记住几个常用的呢?

记住几个常用的就行了, 一般也就是用几个常用的。

字节流

字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是

·字节输出流:OutputStream

·字节输入流:InputStream

字符流

在程序中一个字符等于2个字节,那么java提供了Reader、Writer两个专门操作字符流的类。

·字符输出流:Writer

·字符输入流:Reader

字节-字符转换流

OutputStreamWriter和InputStreamReader

在整个IO包中,实际上就是字节流和字符流,但是除了这两个流之外,还存在一组字节流-字符流的转换类。

[java] view plaincopyprint?

•OutputStreamWriter:是Writer的子类,将输出的字符流转换为字节流。即:将一个字节流的输出对象变为字节流的输出对象

•InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。

java IO流 什么意思?

1. IO流也是Java中比较重要的一块,Java中主要有字节流,字符流,文件等。其中文件也是通过流的方式打开,读取和写入的。

2. IO流的很多接口都使用了装饰者模式,即将原类型通过传入装饰类构造函数的方式,增强原类型,以此获得像带有缓冲区的字节流,或者将字节流封装成字符流等等,其中需要注意的是编码问题,后者打印出来的结果可能是乱码哦。

3. IO流与网络编程息息相关,一个socket接入后,我们可以获取它的输入流和输出流,以获取TCP数据包的内容,并且可以往数据报里写入内容,因为TCP协议也是按照流的方式进行传输的,实际上TCP会将这些数据进行分包处理,并且通过差错检验,超时重传,滑动窗口协议等方式,保证了TCP数据包的高效和可靠传输。

javaio字节流的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 字节流 字符流、javaio字节流的信息别忘了在本站进行查找喔。