服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 字节缓冲流使用 BufferedInputStream 和 BufferedOutputStream这两个流的用法

字节缓冲流使用 BufferedInputStream 和 BufferedOutputStream这两个流的用法

2021-12-02 22:49Java进阶学习交流Java进阶者 Java教程

本文主要学习字节缓冲流使用BufferedInputStream和BufferedOutputStream这两个流的用法来实现文本拷贝、字符流、Reader类、Writer类这些的用法。接下来小编带大家一起来学习这些用法!

字节缓冲流使用 BufferedInputStream 和 BufferedOutputStream这两个流的用法

大家好,我是Java进阶者。

前言

本文主要学习字节缓冲流使用BufferedInputStream和BufferedOutputStream这两个流的用法来实现文本拷贝、字符流、Reader类、Writer类这些的用法。接下来小编带大家一起来学习这些用法!

一、字节缓冲流

1.在前面我们学习了BufferedInputStream和BufferedOutputStream类,这两个类分别是FilterInputStream类和FilterOutputStream类的子类。它们的构造方法分别接受InputStream和OutStream类型的参数,在读写数据有一个缓冲的功能。

2.使用缓冲流来完成读写数据,接下来通过一个案例使用BufferedInputStream和BufferedOutputStream这两个流的用法来实现文本拷贝。实现例子如下所示:

(1)首先在text文件夹目录下创建一个test11.txt并写入"Hello,world~~~test!"内容。

(2)实现文件的拷贝代码如下所示:

  1. import java.io.*;
  2. public class P11 {
  3. public static void main(String[] args) throws Exception {
  4. // TODO Auto-generated method stub
  5. //创建有缓冲区的输入流和输出流
  6. BufferedInputStream in = new BufferedInputStream(new FileInputStream("text/test11"));
  7. BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("text/test12"));
  8. int num;
  9. //判断是否读到文件的末尾
  10. while((num=in.read())!=-1){
  11. bos.write(num);
  12. }
  13. //关闭流
  14. in.close();
  15. bos.close();
  16. }
  17. }

运行的结果如下所示:

字节缓冲流使用 BufferedInputStream 和 BufferedOutputStream这两个流的用法

在上面的代码中,创建了BufferedInputStream和BufferedOutputStream两个缓冲流对象,在这两个流中内部定义一个字节数组,当调用read()方法或write()方法读写数据,先将读写的数据存到字节数组,在把字节数组的数据一次性读写到文件中。

二、字符流

1.我们前面学过InputStream和OutputStream的输入输出操作都是基于字节的,字节流不能操作Unicode字符,我们知道汉字在文件是占2个字节,若使用字节流读取不当会出现乱码现象例如显示一个正方形的框。使用字符流可以避免出现乱码现象。

2.字符流有两个抽象超类分别是Reader和Writer,Reader是字符输入流,使用从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备写入字符。

三、Reader类

1.java.io.Reader是字符输入流的最顶层的父类,这个类定义了以字符为单位读取数据的基本方法,并在子类进行分化和实现。

2.Reader类方法有如下所示:

(1)public int read() throws IOException:读取一个字符。在读取流,如果没有数据就会出现调用受阻的现象,程序会一直等待到有数据读出为止。

(2)public int read(char cbuf[]) throws IOException:读取多个字符到字符数组cbuf。

(3)public int read(char cbuf[],int off,int len) throws IOException:从off开始的位置中读取len个字符存放到字符数组。off参数表示数组偏移量,len参数表示读取数据的长度。

(4)public void mark(int readAheadLimit) throws IOException:在输入流中设置标记。

(5)public boolean markSupporter() throws IOException:测试输入流是否支持mark()方法

(6)public void reset() throws IOException:重置流的当前位置到前面标记的位置。

(7)public void close() throws IOException:表示关闭流。

(8)public long skip(long n) throws IOException:略过流中的数据。若数据不够,跳过仅有的字节,返回跳过的字节数。

(9)public boolean ready():返回输入流是否做好读的准备。

3.Reader类实例代码如下所示:

(1)在text文件夹目录下创建一个test13.txt文件并写入"Hello,World!Java进阶学习交流!"。

(2)代码实现的例子:

  1. public class P12 {
  2. public static void main(String[] args) throws Exception {
  3. // TODO Auto-generated method stub
  4. //声明File对象
  5. File f=new File("text/test13");
  6. Reader in=new FileReader(f);
  7. //所有的数据读到数组c中
  8. char c[]=new char[1024];
  9. //读取内容
  10. int len=in.read(c);
  11. //关闭流
  12. in.close();
  13. System.out.println("内容为:"+new String(c,0,len));
  14. }
  15. }

运行的结果如下所示:

字节缓冲流使用 BufferedInputStream 和 BufferedOutputStream这两个流的用法

四、Writer类

1.Writer类是一个写入字符流的抽象类。

2.Writer方法有如下所示:

(1)public void close() throws IOException方法:表示关闭流。

(2)public voir write(int c) throws IOException方法:表示写入单个字符。

(3)public abstract void read(char cbuf[],int off,int len) throws IOException方法:向流中写入一个数组,参数off指定数组的偏移量,len指定读取数据的长度。

(4)public void write(String str) throws IOException方法:写入一个字符串。

五、总结

本文主要介绍了字节缓冲流、字符流、Reader类、Writer类。字节缓冲流是使用BufferedInputStream和BufferedOutputStream这两个流的用法来实现文本拷贝。字符流有两个抽象超类分别是Reader和Writer,Reader是字符输入流,使用从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备写入字符。介绍了Reader类的方法,通过Reader类实例来实现读取文本文件内容,Writer类是一个写入字符流的抽象类。希望大家通过本文的学习,对你有所帮助!

我是Java进阶者,希望大家通过本文的学习,对你有所帮助!欢迎大家加我微信,有问题可以随时帮大家解决噢,交个朋友也好哇~

原文链接:https://mp.weixin.qq.com/s/O4KJ9jS1AqVnVSVTWLM7vQ

延伸 · 阅读

精彩推荐
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12