Java IO系统——IO流分类说明
来源:互联网 发布:北京中标软件怎么样 编辑:程序博客网 时间:2024/05/16 08:28
按照不同的分类方式,可以将流分为不同的类型,下面从不同角度来对流进行分类:
一、输入流和输出流
1.输入流:
①基类:InputStream/Reader
②模型:把输入设备抽象成一个装水的"水桶",输入流是连接在这个"水桶"上的"水管",这个"水管"里的每个水滴依次排列,每次从"水管"中读取水滴
③方法:InputStream和Reader是所有输入流的抽象基类,本省并不能创建实例来执行输入,但它们是所有输入流的模板,所以它们的方法是所有输入流都可使用的方法。
InputStream/Reader里包含三个方法:
1>int read():从输入流读取单个字节/字符,返回所读取的字节/字符数据(字节/字符数据可直接转换为int类型);
2>int read(byte[]/char[] b):从输入流中最多读取b.length个字节/字符的数据,并将其存储在字节数组/字符数组b中,返回实际读取的字节/字符数。
3>int read(byte[]/char[] b,int off,int len):从输入流中最多读取len个字节/字符的数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节/字符数。
InputStream实例代码:
public class FileInputStreamTest{public static void main(String[] args) throws IOException{//创建字节输入流FileInputStream fis = new FileInputStream("FileInputStreamTest.java");//创建一个长度为1024的“竹筒”byte[] bbuf = new byte[1024];//用于保存实际读取的字节数int hasRead = 0;//使用循环来重复“取水”过程,每次读取到1024个字节,将其存储在bbuf数组中while ((hasRead = fis.read(bbuf)) > 0 ){//取出“竹筒”中水滴(字节),将字节数组转换成字符串输入!System.out.print(new String(bbuf , 0 , hasRead ));}fis.close();}}
2.输出流:
①基类:OutputStream/Writer
②模型:把输出设备抽象成一个空的"水桶",输出流是连在这个"水桶"上的"水管",当程序输出时,依次把"水滴"放入到输出流的"水管"中,再保存到空的"水桶"里;
③方法:OutputStream和Writer也非常相似,两个流提供了如下三个方法:
1>void write(int c):将指定的字节/字符输入到输出流中,其中c既可以代表字节,也可以代表字符。
2>void write(byte[]/char[] buf):将字节数组/字符数组中的数据输出到指定输出流中。
3>void write(byte[]/char[] buf,int off,int len):将字节数组、字符数组从off位置开始,长度为len的字节/字符输出到输出流中。
代码示例:
public class FileOutputStreamTest{public static void main(String[] args) throws IOException{FileInputStream fis = null;FileOutputStream fos = null;try{//创建字节输入流fis = new FileInputStream("FileOutputStreamTest.java");//创建字节输入流fos = new FileOutputStream("newFile.txt");byte[] bbuf = new byte[32];int hasRead = 0;//循环从输入流中取出数据while ((hasRead = fis.read(bbuf)) > 0 ){//每读取一次,即写入文件输出流,从bbuf的0处开始写,长度为hasRead写入输出流中fos.write(bbuf , 0 , hasRead);}}catch (IOException ioe){ioe.printStackTrace();}finally{//使用finally块来关闭文件输入流if (fis != null){fis.close();}//使用finally块来关闭文件输出流if (fos != null){fos.close();}}}}
因为字符流直接以字符为操作单位,所以Writer可以用字符串来代替字符数组,即以String对象作为参数。Writer里还包含如下两个方法:
1>void write(String str):将str字符串里包含的字符输出到指定输出流中。
2>void write(String str,int off,int len):将str字符串从off位置开始,长度为len的字符输出到指定输出流中。
代码示例:
public class FileWriterTest{public static void main(String[] args) throws IOException{FileWriter fw = null;try{//创建字符输出流fw = new FileWriter("poem.txt");fw.write("锦瑟 - 李商隐\r\n"); fw.write("锦瑟无端五十弦,一弦一柱思华年。\r\n");fw.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。\r\n");fw.write("沧海月明珠有泪,蓝田日暖玉生烟。\r\n");fw.write("此情可待成追忆,只是当时已惘然。\r\n");}catch (IOException ioe){ioe.printStackTrace();}finally{//使用finally块来关闭文件输出流if (fw != null){fw.close();}}}}
二、字节流和字符流
字节流和字符流的用法几乎完全一样,区别如下:
1.数据单元不同:字节流操作的是8位的字节(byte),而字符流操作的数据单元是16位的字符。
2.基类不同:字节流InputStream和OutputStream作为基类,字符流已Reader和Writer作为基类。
三、节点流和处理流
1.节点流:
构造参数:IO物理节点
2.处理流:
构造参数:已经存在的流
示例代码:
public class PrintStreamTest{public static void main(String[] args)throws IOException{PrintStream ps = null;try{//创建一个节点输出流:FileOutputStreamFileOutputStream fos = new FileOutputStream("test.txt");//以PrintStream来包装FileOutputStream输出流ps = new PrintStream(fos);//使用PrintStream执行输出ps.println("普通字符串");ps.println(new PrintStreamTest());}catch (IOException ioe){ioe.printStackTrace(ps);}finally{ps.close();}}}
以上就是关于IO系统中IO流的分类介绍,下一篇博文将继续为大家介绍IO系统的相关内容。
- Java IO系统——IO流分类说明
- Java笔记——IO流分类
- Core Java——IO流的分类
- Java IO流分类整理
- java中的IO流分类
- java—IO流
- java - io - 分类总结
- java.io分类
- Java 中的IO分类
- Java IO分类
- Java IO系统——File类
- Java IO系统——RandomAccessFile类
- java IO流的分类和操作
- Java的IO流总结分类
- java基础“IO流及分类”
- java IO流的概念与分类
- java IO流的分类和操作
- java基础io流的分类
- hdu 5667 Sequence(矩阵快速幂+快速幂+费马小定理)(bestcoder# 80 1002)
- Hash Quadratic function (二次探测)
- c++语言const关键字
- 6、XML入门
- 女人50万年的进化(暴经典)
- Java IO系统——IO流分类说明
- mysql-5.6.28源码安装 整个安装过程详细教程,详解
- hdu 1102 Constructing Roads
- Android中的线程池
- HM编码器端提取PU分割模式及CU深度信息
- iOS判断文件或者文件夹的大小
- 关于Base64编码解码
- 互联网服务端技术——如何学(上)
- SDOI R1 day2 T1 生成魔咒 后缀自动机