InputStream、InputStreamReader、BufferedReader用法区别

2023-12-04 11:58

本文主要是介绍InputStream、InputStreamReader、BufferedReader用法区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天回顾总结了一下,Java IO里面的InputStream、InputStreamReader、BufferedReader用法区别

  1. 字节流
    InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等
    OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等
  2. 字符流
    Reader 是字符输入流的所有类的超类,Writer 是字符输出流的所有类的超类
    InputStreamReaderOutputStreamWriter是子类,是字节流通向字符流的桥梁,它将字节流转换为字符流
    还有一个类FileReader继承自InputStreamReader ,可以通过传入一个文件名快速构建字符流
  3. 缓冲流
    BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,
    从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取
    BufferedWriter 由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,
    将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入

自己写的实例操作代码

  1. 字节流读取
	@Testpublic void inputStreamTest() throws IOException {FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\feifei\\test.txt");// 字节流读取byte[] bytes = new byte[1024];int len;// 读取文件内容到bytes数组中,一次读取可以容纳1024个字节while ((len = fileInputStream.read(bytes)) != -1) {// 从0开始截取字节数组的len长度的字节System.out.println(new String(bytes, 0, len, "UTF-8"));}fileInputStream.close();}
  1. 字符流读取
	@Testpublic void inputStreamReadTest() throws IOException {FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\Alibaba\\test.txt");InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");int len;// 字符流读取文件内容,默认一个字符一个字符的读while ((len = inputStreamReader.read()) != -1) {// 从0开始截取字节数组的len长度的字节System.out.println((char) len);}fileInputStream.close();inputStreamReader.close();}

也可以多个多个字符读取,跟字节流类似,定义一个char数组

  1. 自带缓冲区的字符流,按行读取
	@Testpublic void bufferedReadTest() throws IOException {FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\Alibaba\\test.txt");InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String len;// 字符缓冲流流读取文件内容,通常使用的是一行一行的读while ((len = bufferedReader.readLine()) != null) {// 从0开始截取字节数组的len长度的字节System.out.println(len);}fileInputStream.close();inputStreamReader.close();bufferedReader.close();}

这篇关于InputStream、InputStreamReader、BufferedReader用法区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/453374

相关文章

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

javascript中break与continue的区别

在javascript中,break是结束整个循环,break下面的语句不再执行了 for(let i=1;i<=5;i++){if(i===3){break}document.write(i) } 上面的代码中,当i=1时,执行打印输出语句,当i=2时,执行打印输出语句,当i=3时,遇到break了,整个循环就结束了。 执行结果是12 continue语句是停止当前循环,返回从头开始。

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

ActiveMQ—Queue与Topic区别

Queue与Topic区别 转自:http://blog.csdn.net/qq_21033663/article/details/52458305 队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型:         1、点对点(point-to-point,简称PTP)Queue消息传递模型:         通过该消息传递模型,一个应用程序(即消息生产者)可以

深入探讨:ECMAScript与JavaScript的区别

在前端开发的世界中,JavaScript无疑是最受欢迎的编程语言之一。然而,很多开发者在使用JavaScript时,可能并不清楚ECMAScript与JavaScript之间的关系和区别。本文将深入探讨这两者的不同之处,并通过案例帮助大家更好地理解。 一、什么是ECMAScript? ECMAScript(简称ES)是一种脚本语言的标准,由ECMA国际组织制定。它定义了语言的语法、类型、语句、

UVM:callback机制的意义和用法

1. 作用         Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。 2. 使用步骤         (1)在UVM组件中内嵌callback函

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因