Java IO流总结
#Java IO流总结
java 的io系统简单介绍
io体系 在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable
而且构建出的庞大io类库体系使用了装饰者模式设计
java的io体系可以分为流式和非流式和其他类
- 流式部分――IO的主体部分;
- 非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;
- 其他类–文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类
io 流
java的流按照输入输出可以分为输入流输出流,按照输入输出内容分为字节流和 字符流
有四个抽象类:
- 字节流 InputStream OutputStream
- 字符流 Reader Writer
注:为什么会有两种类型呢?Java中字符是以Unicode形式存储的,一个字符占用两个字节,然而InputStream和OutputStream都是以字节形式读取或写出数据的,会将一个字符拆分成两个字节来读写这样会造成乱码(比如读取或者写出中文)
Java IO流体系中常用的流分类
粗体部分是节点流,其他就是常用的处理流。
流分类 | 使用分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer | |
节点流 | 访问文件 | FileInputStream | FileOutStream | FileReader | FileWriter |
节点流 | 访问数值 | ByteArrayInputStream | ByteArrayOutStream | CharArrayReader | CharArrayWriter |
节点流 | 访问管道 | PipedInputStream | PipedOutStream | PipedReader | PipedWriter |
节点流 | 访问字符串 | StringReader | StringWriter | ||
处理流 | 缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
处理流 | 转换流 | InputStreamReader | OutputStreamWriter | ||
处理流 | 对象流 | ObjectInputStream | ObjectOutputStream | ||
处理流 | 抽象基类(过滤) | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
流分类 | 使用分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|---|
处理流 | 打印流 | PrintStream | PrintWriter | ||
处理流 | 推回输入流 | PushbackInputStream | PushbackReader | ||
处理流 | 特殊流 | DataInputStream | DataOutputStream |
常用类的特性
-
FileOutStream FileWriter 在自定true 来追加内容
-
StringWriter的 void write(String str)方法 写入一个字符串。
-
BufferedReader的 String readLine() 方法 读取一个文本行。
-
InputStreamReader **InputStreamReader(InputStream in,String charsetName) **创建使用指定字符集的 InputStreamReader 可以用来处理中文编码问题
-
OutputStreamWriter OutputStreamWriter(OutputStream out,String charsetName)创建使用指定字符集的 OutputStreamWriter 可以用来处理中文编码问题
-
InputStream OutputStream 字节输入输出流常用的读取方法 如下:
byte[] in = new byte[1024]; int len = -1; while((len = InputStream.read(in))>0){//将读出的字节存放在in字节数组中 并返回读取长度 如果已到达 //System.out.println(new String(in,0,len)); //文件末尾,则返回 -1。 OutputStream.write(in,0,len);//写入一个字节数组in 从位置0开始读到len }
-
Reader Writer 字符输入输出流常用的读取方法 将字节的读取方法中的字节数组改成字符数组就可以了
-
byte[] in = new byte[1024]; int len = inputStream.read(in); String message = new String(in,0,len);