黑马程序员----IO流
来源:互联网 发布:centos websocket 编辑:程序博客网 时间:2024/06/05 06:51
---------------------- android培训 、 java培训 、 期待与您交流! ------------------
!!!流(stream)的概念
流源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。
!!!Java中的流,可以从不同的角度进行分类。
1、按照数据流的方向不同可以分为:输入流和输出流。
2、按照处理数据单位不同可以分为:字节流和字符流。字节流:一次读入或读出是8位二进制。
字符流:一次读入或读出是16位二进制。字节流和字符流的原理是相同的,只不过处理的单位不同而已。
3、按照实现功能不同可以分为:节点流和处理流。直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流,其它的流则称为处理流。节点流:直接与数据源相连,读入或读出。处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。
!!!Jdk提供的流继承了四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。
!!!io常见类。
*_*InputStream
- InputStream 是所有的输入字节流的父类,它是一个抽象类。
- ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
- ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。
int read()throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾。
void close()throws IOException 关闭流释放内存资源。
long skip(long n)throws IOException 跳过n个字节不读
*_*OutputStream
- ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,
- ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。
OutputStream的基本方法:
void write(int b) throws IOException 向输出流写入一个字节数据。
void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地。
void close() throws IOException 关闭流释放内存资源。
*_*Writer
- Writer 是所有的输出字符流的父类,它是一个抽象类。
- CharArrayWriter、StringWriter 是两种基本的介质流,它们分别向Char 数组、String 中写入数据。PipedWriter 是向与其它线程共用的管道中写入数据,
- BufferedWriter 是一个装饰器为Writer 提供缓冲功能。
- PrintWriter 和PrintStream 极其类似,功能和使用也非常相似。
- OutputStreamWriter 是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 其实就是一个实现此功能的具体类(具体可以研究一SourceCode)。功能和使用和OutputStream 极其类似,后面会有它们的对应图。
Writer的基本方法:
void write(int c)throws IOException 向输出流写入一个字符数据。
void write(String str)throws IOException 将一个字符串中的字符写入到输出流。
void write(String str,int offset,int length)将一个字符串从offset开始的length个字符写入到输出流。
void flush()throws IOException 将输出流中缓冲的数据全部写出到目的地。
void close()throws IOException 关闭流释放内存资源。
*_*Reader
- Reader 是所有的输入字符流的父类,它是一个抽象类。
- CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。PipedReader 是从与其它线程共用的管道中读取数据。
- BufferedReader 很明显就是一个装饰器,它和其子类负责装饰其它Reader 对象。
- FilterReader 是所有自定义具体装饰流的父类,其子类PushbackReader 对Reader 对象进行装饰,会增加一个行号。
- InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。我们可以从这个类中得到一定的技巧。Reader 中各个类的用途和使用方法基本和InputStream 中的类使用一致。
Reader的基本方法:
int read()throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾。
void close()throws IOException 关闭流释放内存资源。
java中io常用的流:
1、访问文件:
FileInputStream和FileOutputStream继承基类用于向文件中输入输出字节。
FileReader和FileWriter继承基类用于向文件中输入输出字符,输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入。
2、缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。
此处理流的构造方法都得传相对应的基类类型。
BufferedReader:提供了readLine方法用于高校读取一行字符串,
BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行。
3、转换流:主要作用将字节流转换成字符流。用处较大!
转换流在构造时可以指定其编码集合InputStreamReader需要和InputStream套接OutputStreamWriter需要和OutputStream套接
例:OutputStreamWriter osw=new OutputStreamWriter(newFileOutputStream(文件路径))。
方法例:osw.getEncoding();获得流的编码方式。
4、数据流与字节数组流:
数据流主要为实现可以存取Java原始数据类型如long,boolean数据流是字节流。
DataInputStream需要和InputStream套接DataOutputStream需要和OutputStream套接。
DataInputStream方法:readBoolean()readInt()read……()……readUTF():网络传输常用方法读一个Unicode字符串DataOutputStream方法与DataInputStream基本对应为写的方法//此构造函数等于已可以往一个字节数组里输入内容
ByteArrayOutputStream baos=new ByteArrayOutputStream();//此方法为获取一个字节数组方法返回字节数组baos.toByteArray();
//此方法获取字节数组占了多少字节。
5、Print流:
Print流只有输出流无输入流,PrintWriter和PrintStream分别针对字符字节。
两个类提供了重载的Print和Println方法用于多种数据类型的输出PrintWriter和PrintStream的输出操作不会抛出异常PrintWriter和PrintStream有自动flush功能。
----System.setOut(接收OutputStream类):用于设置系统默认输出。
6、Object流:
直接将Object写入或读出。transient关键字为不序列化此成员变量,需要序列化的类必须实现Serializable接口。
主要方法:writeObject(Object);readObject()。
7.字符流与字节流转换:
转换流的特点:
- 其是字符流和字节流之间的桥梁。
- 可对读取到的字节数据经过指定编码转换成字符。
- 可对读取到的字符数据经过指定编码转换成字节。
何时使用转换流?
- 当字节和字符之间有转换动作时;
- 流操作的数据需要编码或解码时。
具体的对象体现:
- InputStreamReader:字节到字符的桥梁
- OutputStreamWriter:字符到字节的桥梁
这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。
8、RandomAccessFile类
该对象并不是流体系中的一员,其封装了字节流,同时还封装了一个缓冲区(字符数组),通过内部的指针来操作字符数组中的数据。 该对象特点:
- 该对象只能操作文件,所以构造函数接收两种类型的参数:a.字符串文件路径;b.File对象。
- 该对象既可以对文件进行读操作,也能进行写操作,在进行对象实例化时可指定操作模式(r,rw)
- 黑马程序员 IO流
- 黑马程序员IO流
- 黑马程序员-IO流
- 黑马程序员---IO流
- 黑马程序员-----IO流
- 黑马程序员--io流
- 黑马程序员:IO流
- 黑马程序员----IO流
- 黑马程序员--IO流
- 黑马程序员-IO流
- 黑马程序员:IO流
- 黑马程序员IO流
- 黑马程序员:IO流
- 黑马程序员-IO流
- 黑马程序员---IO流
- 黑马程序员---IO流
- 黑马程序员---IO流
- 黑马程序员---IO流
- vimshell的工具
- 跳表
- 采用Handler的postDelayed实现安卓定时器
- nginx源码分析--GDB调试
- Unix/Linux的命令行工具
- 黑马程序员----IO流
- listview在拖动的时候背景图片消失变成黑色背景的原因及解决方法
- C# Console IO
- MySQL分页
- 随手记——Java
- 位图排序
- C++中的类型转换
- 腾讯实习笔试2014.04.12
- uva 10465 Homer Simpson