我理解的java流基础篇(一)
来源:互联网 发布:腾讯云已备案域名出售 编辑:程序博客网 时间:2024/05/24 08:33
在我的认识中,Java流就是用来读写文件的。说它是流不如说他是管来得更准确一点,是从源文件通向目标文件的一个管通道。
一、从不同的角度区分流:
输入/输出
字节流
字符流
输入流
Inputstream
Reader
输出流
OutputStream
Writer
二、流之间的继承关系:
字节流:
输入流
输出流
字符流:
输入流
输出流
ps:若需记忆,按字节输入输出流,字符输入输出流的子类个数7567
三、就这几种流的用处,做一个简单的辨别:
Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义)
注:下表中带下划线的是抽象类,不能创建对象。粗体部分是节点流,其他就是常用的处理流。
流分类使用分类字节输入流字节输出流字符输入流字符输出流 抽象基类InputStreamOutputStream
ReaderWriter节点流访问文件FileInputStreamFileOutStreamFileReaderFileWriter访问数值ByteArrayInputStreamByteArrayOutStreamCharArrayReaderCharArrayWriter访问管道PipedInputStreamPipedOutStreamPipedReaderPipedWriter访问字符串 StringReaderStringWriter处理流缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter转换流 InputStreamReaderOutputStreamWriter对象流ObjectInputStreamObjectOutputStream 抽象基类(过滤)FilterInputStreamFilterOutputStreamFilterReaderFilterWriter打印流 PrintStream PrintWriter推回输入流PushbackInputStream PushbackReader 特殊流DataInputStreamDataOutputStream
总结:
1.Java IO是采用的是装饰模式,即采用处理流来包装节点流的方式,来达到代码通用性。
2.处理流和节点流的区分方法,节点流在新建时需要一个数据源(文件、网络)作为参数,而处理流需要一个节点流作为参数,就是说节点流是操作文件的,处理流是操作节点流的。
3.处理流的作用就是提高代码通用性,编写代码的便捷性,提高性能。
4.节点流都是对应抽象基类的实现类,它们都实现了抽象基类的基础读写方法。
四、流常用的几种方法:
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流基础篇(二)
- 我理解的java流基础篇(三)
- 我理解的java流基础篇(四)
- 我的java基础学习笔记(一)
- 一、我对java中编码的理解(摘)
- 黑马程序员[android]我的java基础学习日记一
- java中的字符流--我的理解
- 深入理解Java内存模型《一》基础
- JAVA IO (一) 基础深入理解
- JAVA IO (一) 基础深入理解
- java多态 我的理解
- 我理解的java多态
- 我对windows编程基础的理解
- 我对duwamish7的一些理解(一)
- 我所理解的计算机(一)
- 我对分层的理解(一)
- 我对设计模式的理解(一)
- 搭建Spark集群(独立模式)
- [bzoj3053][kd树]The Closest M Points
- POJ1003
- 微博爬虫,每日百万级数据
- php数据类型转换
- 我理解的java流基础篇(一)
- opengles数据类型和基础知识
- 从数据库得到数据导出指定格式的xml文件,上传到NC接口,返回回执到本地一个xml文件(接上篇补充)
- 改变private类型的成员变量
- TensorFlow入门(五)多层 LSTM 通俗易懂版
- java—HashMap与Hashtable的源码比较
- 刷题#R7
- 蓝桥杯 基础练习 数列排序
- 继承的内存问题