开课吧Java课堂:什么是流?如何运用字节流和字符流?
Java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过Java的输入/输出系统与物理设备链接。尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型的外部设备。
这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个洁净的方法,例如它不需要代码理解键盘和网络的不同。Java中流的实现是在java.io包定义的类层次结构内部的。
字节流和字符流
字节流为处理字节的输入和输出提供了方便的方法。例如使用字节流读取或书写二进制数据。字符流为字符的输入和输出处理提供了方便。它们采用了统一的编码标准,因而可以国际化。当然,在某些场合,字符流比字节流更有效。
Java的原始版本(Java 1.0)不包括字符流,因此所有的输入和输出都是以字节为单位的。Java 1.1中加入了字符流,某些字节形式的类和方法不受欢迎。这也是为什么没用字符流的老代码在适当的地方需要更新的原因。
需要声明:在最底层,所有的输入/输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。
下面是对字节流和字符流的概述。
字节流类
字节流由两个类层次结构定义。在顶层有两个抽象类:InputStream 和 OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件,网络连接,甚至是内存缓冲区。字节流类显示于表中。
流类 | 含义 |
---|---|
BufferedInputStream | 缓冲输入流 |
BufferedOutputStream | 缓冲输出流 |
ByteArrayInputStream | 从字节数组读取的输入流 |
ByteArrayOutputStream | 向字节数组写入的输出流 |
DataInputStream | 包含读取Java标准数据类型方法的输入流 |
DataOutputStream | 包含编写Java 标准数据类型方法的输出流 |
FileInputStream | 读取文件的输入流 |
FileOutputStream | 写文件的输出流 |
FilterInputStream | 实现 InputStream |
FilterOutputStream | 实现 OutputStream |
InputStream | 描述流输入的抽象类 |
OutputStream | 描述流输出的抽象类 |
PipedInputStream | 输入管道 |
PipedOutputStream | 输出管道 |
PrintStream | 包含print( ) 和 println( )的输出流 |
PushbackInputStream | 支持向输入流返回一个字节的单字节的“unget”的输入流 |
RandomAccessFile | 支持随机文件输入/输出 |
SequenceInputStream | 两个或两个以上顺序读取的输入流组成的输入流 |
抽象类InputStream 和 OutputStream定义了实现其他流类的关键方法。最重要的两种方法是read()和write(),它们分别对数据的字节进行读写。两种方法都在InputStream 和OutputStream中被定义为抽象方法。它们被派生的流类重载。
字符流类
字符流类由两个类层次结构定义。顶层有两个抽象类:Reader和Writer。这些抽象类处理统一编码的字符流。Java中这些类含有多个具体的子类。
字符流的输入/输出类
流类 | 含义 |
---|---|
BufferedReader | 缓冲输入字符流 |
BufferedWriter | 缓冲输出字符流 |
CharArrayReader | 从字符数组读取数据的输入流 |
CharArrayWriter | 向字符数组写数据的输出流 |
FileReader | 读取文件的输入流 |
FileWriter | 写文件的输出流 |
FilterReader | 过滤读 |
FilterWriter | 过滤写 |
InputStreamReader | 把字节转换成字符的输入流 |
LineNumberReader | 计算行数的输入流 |
OutputStreamWriter | 把字符转换成字节的输出流 |
PipedReader | 输入管道 |
PipedWriter | 输出管道 |
PrintWriter | 包含print( )和println( )的输出流 |
PushbackReader | 允许字符返回到输入流的输入流 |
Readerr | 描述字符流输入的抽象类 |
StringReader | 读取字符串的输入流 |
StringWriter | 写字符串的输出流 |
Writer | 描述字符流输出的抽象类 |
抽象类Reader和Writer定义了几个实现其他流类的关键方法。其中两个最重要的是read()和write(),它们分别进行字符数据的读和写。这些方法被派生流类重载。
预定义流
所有的Java程序自动导入java.lang包。该包定义了一个名为System的类,该类封装了运行时环境的多个方面。例如,使用它的某些方法,你能获得当前时间和与系统有关的不同属性。
System 同时包含三个预定义的流变量,in,out和err。这些成员在System中是被定义成public 和static型的,这意味着它们可以不引用特定的System对象而被用于程序的其他部分。
System.out是标准的输出流。默认情况下,它是一个控制台。
System.in是标准输入,默认情况下,它指的是键盘。System.err指的是标准错误流,它默认是控制台。然而,这些流可以重定向到任何兼容的输入/输出设备。
System.in是inputStream的对象;System.out和System.err是PrintStream的对象。它们都是字节流,尽管它们用来读写外设的字符。如果愿意,你可以用基于字符的流来包装它们。
前面的章节在例题中已经用到过System.out。你可以以同样的方式使用System.err。下面对此进行解释,你会看到使用System.in有一点复杂。
开课吧Java课堂:什么是流?如何运用字节流和字符流?相关推荐
- java字节流分为_Java文件流可分为字节流和字符流。
[单选题]TCP 和 UDP 协议的相似之处是 () [单选题]That was the first time I ______ French with a foreigner. [判断题] [判断题 ...
- 《Java SE实战指南》22-04:字节流和字符流
<Java SE实战指南> 22-04:字节流和字符流 内容导航: 前言 1.分类定义 2.字符流常用类 2.1.FileWriter 2.2.FileReader 前言 我们每天都在使用 ...
- java字节流分为_Java的流操作分为字节流和字符流两种。
Java的流操作分为字节流和字符流两种. 1. 字节流 所有的读操作都继承自一个公共超类java.io.InputStream类. 所有的写操作都继承自一个公共超类java.i ...
- Java语言基础(IO流2(字节流、字符流))
Java语言基础 IO流 字节流 可以读写任何类型的文件,比如:音频.视频 .文本文件 字节流的抽象基类: 字节输入流:InputStream 字节输出流:OutputStream 我们发现Input ...
- JavaSE进阶26 - IO流概述、字节流、字符流、转换流、缓冲流
目录 IO概述 FileInputStream的使用 FileOutputStream使用 文件复制 文件的复制原理 代码 FileReader FileWriter 复制普通文本文件 Buffere ...
- 转换流(将字节流转换为字符流)
1.将字节流转换为字符流 (1)名称是前面四种抽象类的组合 (2)功能都是将字节流转换成字符流,但是没有将字符流转换成字节流的类,因为,已经获得了字符流,根本没有必要转换成字节流 (3)InputSt ...
- IO流如何选择字节流和字符流??
问:字节流与字符流有什么区别? 答:计算机中的一切最终都是以二进制字节形式存在的,对于我们经常操作的字符串,在写入时其实都是先将字符转成对应的字节,然后将字节写入到输出流,在读取时其实都是先读到的是字 ...
- Java I/O流(File、字节流、字符流、过滤流、对象流)详解
File以及I/O流 一.File类的使用 java.io.File类 代表硬盘上的一个文件或者目录 java.io.File类作用: 每个File类的对象表示一个磁盘文件或目录,其对象属性中包含了文 ...
- java 字符流图片_java 字节流、字符流(复制图片、复制文本)
1.File 1)构造方法 2)创建 3)判断.获取 4)删除 2.字节流 1)字节流写数据的3种方式 FileOutputStream fos = new FileOutputStream(&quo ...
- java中什么是字节流和字符流_java中字节流与字符流的区别是什么
字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...
最新文章
- LIVE 预告 | 华为诺亚韩凯:Transformer in Transformer
- 常考数据结构与算法:平衡二叉树
- 微信小程序开发之https从无到有
- python 文件操作 os.mkdir()函数
- error C1853: “Debug\BigBuffer.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)...
- c语言 printf_C语言(4) 屏幕输出指令printf
- 如何仅用300行代码完成spring基本框架?
- 临床试验中的样本量估算---实践篇
- 计算机软考中级网络工程师考点总结——待续
- 压缩——实测rar压缩的各种选项对文件压缩的效果(包括固实压缩)
- 2020江苏事业编计算机类真题,2020江苏事业单位计算机类岗位考情
- Anaconda——最省心的 Python 版本
- 计算雅思成绩C语言,雅思成绩计算器分析
- “干爹”这事是怎么在北美洗白白的
- FreeMarkerBase
- 通达信资金净流入公式_通达信资金净入净出指标公式
- 人才库 talent pool
- 连接另一台电脑下的虚拟机系统
- 高校部署房产管理系统可实现那些目标?
- android实现10ms定时器,Android定时器不低于〜120ms分辨率
热门文章
- [转载] 知乎日报接口
- [转载] 实训心得体会
- [转载] Java中final关键字
- Linux(centos)下安装JDK
- java多线程测试性能,总线程使用总时间。
- C#实现鼠标进入按键范围后按键自动窗体内位置移动
- 关于ASP.NET给产品分类,分页,详情页生成静态页面
- 一位信息系统项目管理培训老师写的《论婚姻项目管理》值得看一下!
- php floatval_php floatval()函数的用法详解
- python如何请求curl_Python爬虫偷懒神器 —— 一键构造请求头!