本帖最后由 sunke1229 于 2016-7-20 23:22 编辑
流使用后一定要释放资源 流使用后一定要释放资源 流使用后一定要释放资源 流使用后一定要释放资源
流按流向分为两种:输入流,输出流。
流按操作类型分为两种:字节流,字符流
字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流 : 字符流只能操作纯字符数据,比较方便。
字节流的抽象父类: InputStream OutputStream
字符流的抽象父类:Reader Writer
常见流
FileInputStream FileOutputStream 文件流字节流
**FileOutputStream fos = new FileOutputStream("bbb.txt",true); 追加
int read(byte[] b):一次读取一个字节数组 缓冲流的根本
write(byte[] b):一次写出一个字节数组 缓冲流的根本
BufferedInputStream BufferOutputStream 缓冲字节流
FileReader FileWriter 文件字符流
BufferedReader BufferedWriter 缓冲字符流
BufferedReader 的readLine()
BufferedWriter 的newLine() 写出一个换行
LineNumberReader 行号字符流(只有读,没有Writer)
getLineNumber()和setLineNumber()获取行号
InputStreamReader OutputStreamWriter 字符字节转换流(将字节流通过包装转换为字符流)
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK"));
SequenceInputStream序列输入流(只有读,没有OutputStream)
SequenceInputStream sis = new SequenceInputStream(fis1, fis2); //将两个流整合成一个流
将n个流拼成一个流
- FileInputStream fis1 = new FileInputStream("a.txt"); //创建输入流对象,关联a.txt
- FileInputStream fis2 = new FileInputStream("b.txt"); //创建输入流对象,关联b.txt
- FileInputStream fis3 = new FileInputStream("c.txt"); //创建输入流对象,关联c.txt
- Vector<InputStream> v = new Vector<>(); //创建vector集合对象
- v.add(fis1); //将流对象添加
- v.add(fis2);
- v.add(fis3);
- Enumeration<InputStream> en = v.elements(); //获取枚举引用
- SequenceInputStream sis = new SequenceInputStream(en); //传递给SequenceInputStream构造
复制代码
ByteArrayOutputStream ByteArrayInputStream 这个不需要close
该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
ps:个人感觉就是一个字节数组。。。。
ObjecOutputStream ObjectInputStream 对象输入输出流(将对象序列化和反序列化)
writeObject() readObject()
要写出的对象必须实现Serializable接口才能被序列化
PrintStream字节打印流
PrintWriter字符打印流
只有输出流 没有输入流 println()方法
System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据
DataInputStream DataOutputStream 可以按照基本数据类型大小读写数据
流使用后一定要释放资源 流使用后一定要释放资源 流使用后一定要释放资源 流使用后一定要释放资源
|
|