java 流概念的理解
2015-08-05 10:05
351 查看
java 流概念的理解
一、“流”的概念
“流”是一个抽象的概念,它是对输入输出设备的一种抽象理解,在java中,对数据的输入输出操作都是以“流”的方式进行的。“流”具有方向性,输入流、输出流是相对的。当程序需要从数据源中读入数据的时候就会开启一个输入流,相反,写出数据到某个数据源目的地的时候也会开启一个输出流。数据源可以是文件、内存或者网络等。
二、“流”的分类
“流”序列中的数据可以是未经加工的原始二进制数据,也可以是经过一定编码处理后符合某种格式的特定数据,因此java中的“流”分为两种流:
1) 字节流:数据流中的最小的数据单元是字节,一次读入读出8位二进制;
2) 字符流:数据流中的最小的数据单元是字符,一次读入读出16位二进制,java中的字符是Unicode编码,一个字符占用两个字节。
三、“流”结构分类
“流”存在与java.io包中,主要包含四种基本的类,InputStream、OutputStream、Reader及Writer类,它们分别处理字节流和字符流:
它们之间的继承关系图为:
字节流:
输入流
输出流
字符流:
输入流
输出流
四、“流”常用方法
InputStream为字节输入流,本身是个抽象类,必须依靠其子类实现各种功能,数据单位位字节(8bit)。常用方法有:
(1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。
(2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的
(3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
(4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,
(5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
(6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.
OutputStream为字节输出流,常用方法有:
(1) public
void write(byte b[ ]):将参数b中的字节写到输出流。
(2) public void write(byte b[ ], int
off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。
(3) public abstract void write(int
b) :先将int转换为byte类型,把低字节写入到输出流中。
(4) public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。
(5) public void close( ) : 关闭输出流并释放与流相关的系统资源。
Reader为字符输入流,常用方法有:
(1) public int read() throws IOException:
读取一个字符,返回值为读取的字符
(2) public int read(char cbuf[]) throws IOException:读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量
(3) public abstract int read(char cbuf[],int off,int len) throws IOException:读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现。
Writer为字符输出流,常用法有:
(1) public void write(int c) throws IOException:将整型值c的低16位写入输出流
(2)
public void write(char cbuf[]) throws IOException:将字符数组cbuf[]写入输出流
(3)
public abstract void write(char cbuf[],int off,int len) throws IOException:将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流
(4) public void write(String str) throws IOException:将字符串str中的字符写入输出流
(5)
public void write(String str,int off,int len) throws IOException:将字符串str 中从索引off开始处的len个字符写入输出流
(6) flush( )
:刷空输出流,并输出所有被缓存的字节。
(7) close() :关闭流
一、“流”的概念
“流”是一个抽象的概念,它是对输入输出设备的一种抽象理解,在java中,对数据的输入输出操作都是以“流”的方式进行的。“流”具有方向性,输入流、输出流是相对的。当程序需要从数据源中读入数据的时候就会开启一个输入流,相反,写出数据到某个数据源目的地的时候也会开启一个输出流。数据源可以是文件、内存或者网络等。
二、“流”的分类
“流”序列中的数据可以是未经加工的原始二进制数据,也可以是经过一定编码处理后符合某种格式的特定数据,因此java中的“流”分为两种流:
1) 字节流:数据流中的最小的数据单元是字节,一次读入读出8位二进制;
2) 字符流:数据流中的最小的数据单元是字符,一次读入读出16位二进制,java中的字符是Unicode编码,一个字符占用两个字节。
三、“流”结构分类
“流”存在与java.io包中,主要包含四种基本的类,InputStream、OutputStream、Reader及Writer类,它们分别处理字节流和字符流:
输入/输出 | 字节流 | 字符流 |
输入流 | Inputstream | Reader |
输出流 | OutputStream | Writer |
它们之间的继承关系图为:
字节流:
输入流
输出流
字符流:
输入流
输出流
四、“流”常用方法
InputStream为字节输入流,本身是个抽象类,必须依靠其子类实现各种功能,数据单位位字节(8bit)。常用方法有:
(1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。
(2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的
(3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
(4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,
(5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
(6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.
OutputStream为字节输出流,常用方法有:
(1) public
void write(byte b[ ]):将参数b中的字节写到输出流。
(2) public void write(byte b[ ], int
off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。
(3) public abstract void write(int
b) :先将int转换为byte类型,把低字节写入到输出流中。
(4) public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。
(5) public void close( ) : 关闭输出流并释放与流相关的系统资源。
Reader为字符输入流,常用方法有:
(1) public int read() throws IOException:
读取一个字符,返回值为读取的字符
(2) public int read(char cbuf[]) throws IOException:读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量
(3) public abstract int read(char cbuf[],int off,int len) throws IOException:读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现。
Writer为字符输出流,常用法有:
(1) public void write(int c) throws IOException:将整型值c的低16位写入输出流
(2)
public void write(char cbuf[]) throws IOException:将字符数组cbuf[]写入输出流
(3)
public abstract void write(char cbuf[],int off,int len) throws IOException:将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流
(4) public void write(String str) throws IOException:将字符串str中的字符写入输出流
(5)
public void write(String str,int off,int len) throws IOException:将字符串str 中从索引off开始处的len个字符写入输出流
(6) flush( )
:刷空输出流,并输出所有被缓存的字节。
(7) close() :关闭流
相关文章推荐
- JAVAWEB 生成excel文字在一格显示两位不变成#号
- Java NIO框架Netty教程 (九)-再谈收发信息次数问题
- java编写一个完美的equals方法
- Java NIO框架Netty教程 (八) Java NIO Selector模式
- Java--多态和虚化
- springMVC环境配置
- 杭电ACM2041java做法
- 如何在 Java 中正确使用 wait, notify 和 notifyAll
- Leetcode-204(Java) Count Primes
- myeclipse&eclipse的项目源码部署到哪里去了?
- Gradle在大型Java项目上的应用
- java.lang.IllegalArgumentException: Line argument must contain a key and a value
- Java NIO框架Netty教程 (五) 字符串消息收发
- 深入解析Java中的JDBC事务
- ArrayList中重复元素处理方法.[Java]
- JDK动态代理与Cglib库
- struts 2 的原理 更加详细
- Java NIO框架Netty教程(二) – 白话概念
- Java NIO框架Netty教程(一) – Hello Netty
- spring整合消息队列rabbitmq