java Io流学习(二) 字节流
来源:互联网 发布:阿里云域名咋续费 编辑:程序博客网 时间:2024/05/19 13:15
一、IO流分类
IO流若按照流的方向可以分为:
输出流(内容从程序内存到磁盘文件的过程,即向文件中添加内容)的类:OutputStream,Writer.
输入流(内容从磁盘空间到程序内存的过程,即从文件中读取内容)的类:InputStream,Reader.
按照操作对象也可以分为:
字节流(操作对象是单个字节)的类:InputStream,OutputStream.
字符流(操作对象是单个字符)的类:Reader,Writer.
因此IO流的顶级父类就是InputStream,OutputStream,Reader,Writer,其余的流类都是继承于这4个类,因此只需要了解4个父类的属性方法,基本子类操作就没有多大问题
二、InputStream(字节输入流)
InputStream是java所有的字节输入流的父类,其本质是一个抽象类,因此实例化父类对象的时候一般通过子类对象向上实例化,而对于InputStream的API只需要了解几个常规的即可(下面会举实例展示各个APi的作用)
1、read()方法
package com;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;public class Test5 {public static void main(String[] args) throws Exception { File file=new File("D:"+File.separator+"a.txt");//创建file对象,a.txt中的内容是"zhangsan" //InputStream stream=new InputStream() //此代码会报错,因为InputStream是抽象类,不能实例化对象 InputStream stream=new FileInputStream(file); //子类FileInputStream向上转型实例化父类InputStream//read()方法,单字节读取,返回的int就是读取到的字节的int表示方式,byte c[]=new byte[1024]; //创建字节数组,用于存储读取出来的字节int z=0;int x=0;while((z=stream.read())!=-1){ //进入循环c[x]=(byte)z; //注意要转成字节然后存放到存放到字节数组中去x++;}stream.close();System.out.println(new String(c)+"1");}}
2、read(byte[])方法
package com;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;public class Test4 { public static void main(String[] args) throws Exception { File file=new File("D:"+File.separator+"a.txt");//创建file对象,a.txt中的内容是"zhangsan"// InputStream stream=new InputStream() //此代码会报错,因为InputStream是抽象类,不能实例化对象InputStream stream=new FileInputStream(file); //子类FileInputStream向上转型实例化父类InputStream//read(byte[])方法,一次读取,返回读取成功的字节个数,同时字节会读入到数组中--较为方便byte b[]=new byte[1024];int i=stream.read(b); stream.close();System.out.println(i);System.out.println(new String(b,0,i));}}
3、read(byte b[],int off,int len)
package com;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;public class Test6 {public static void main(String[] args) throws Exception { File file=new File("D:"+File.separator+"a.txt");//创建file对象,a.txt中的内容是"zhangsan" //InputStream stream=new InputStream() //此代码会报错,因为InputStream是抽象类,不能实例化对象 InputStream stream=new FileInputStream(file); //子类FileInputStream向上转型实例化父类InputStream//read(bytep[] b,int off ,int len)方法,从输出流中读取最多len个字节到数组中,从下表0ff开始添加数据 int len=(int)file.length(); byte[] b=new byte[1024]; int i=0;while((i=stream.read(b, 0, len))!=-1){ //等于是多次调用read()方法,单个字节单个字节的读取,知道len个字节为止System.out.println(new String(b));}stream.close();}
以上3个方法运行的结果都是“zhangsan”,但是追究效率来说,建议使用read(byte[] b )方法较好,一次读入,注意在建立数组的时候的长度,可以根据流的长度来确认,避免占用较多内存
三、OutputStream (字节输出流)
OutputStream是javaio流中所有输出流的父类,因此同上述的输入流一样,只需要了解其常用API即可(重点在write方法)
1)write(int b)方法
package com;import java.io.*;public class Test7 {public static void main(String[] args) throws Exception { File file=new File("D:"+File.separator+"c.txt");//创建file对象,注意此时我的D盘是没有c.txt的文件的 //流的操作会自动判断是否有该文件存在,若有,则进行覆盖,若没有则会新建,然后在输出内容 //OutputStream stream=new OutputStream() //此代码会报错,因为InputStream是抽象类,不能实例化对象 OutputStream stream=new FileOutputStream(file); //子类FileOutputStream向上转型实例化父类OutputStream//write(int b)方法,注意参数是字节的int型位数,而不是常规intString str="hello";byte b[]=str.getBytes();//字节输出流,要操作字节,所以把字符转成字节for (int i = 0; i < b.length; i++) {stream.write(b[i]);}stream.close();}}
2)write(byte[])方法
package com;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.OutputStream;public class Test8 {public static void main(String[] args) throws Exception {File file=new File("D:"+File.separator+"c.txt");//创建file对象,注意此时我的D盘是有c.txt的文件的 //流的操作会自动判断是否有该文件存在,若有,则进行覆盖,若没有则会新建,然后在输出内容 //OutputStream stream=new OutputStream() //此代码会报错,因为InputStream是抽象类,不能实例化对象 OutputStream stream=new FileOutputStream(file); //子类FileOutputStream向上转型实例化父类OutputStreamString str="zhangsan";byte b[]=str.getBytes();//字节输出流,要操作字节,所以把字符转成字节stream.write(b); //一次输出整个数组stream.close();}}
3)write(byteb [] ,int off,int len )
package com;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.OutputStream;public class Test9 {public static void main(String[] args) throws Exception {File file=new File("D:"+File.separator+"c.txt");//创建file对象,注意此时我的D盘是有c.txt的文件的 //流的操作会自动判断是否有该文件存在,若有,则进行覆盖,若没有则会新建,然后在输出内容 //OutputStream stream=new OutputStream() //此代码会报错,因为InputStream是抽象类,不能实例化对象 OutputStream stream=new FileOutputStream(file); //子类FileOutputStream向上转型实例化父类OutputStreamString str="wagnwu";byte b[]=str.getBytes();//字节输出流,要操作字节,所以把字符转成字节int len=b.length-1; //少取一个字节stream.write(b, 0, len);//等于是单个单个字节输出stream.close();}}
以上3个write()方法的结果,请自行运行查看,仔细观察会发现,三种方法的情况的话,后两种方法效率会较高(第二种一次性输出所有字节,第三种获取字节只输出想要的部分内容),另注意,输出流操作完毕后记得运行close()方法
阅读全文
0 0
- java Io流学习(二) 字节流
- 字节流--IO学习笔记(二)
- java IO体系结构(二) 字节流
- Java学习笔记之IO(二):InputStream输入字节流
- Java IO流(二) 字节流
- java中的IO流之字节流详解(二)
- java IO (二)字符流与字节流
- JAVA IO流总结(二)——字节流
- Java IO知识点总结二(字节流)
- Java IO(二):IO流——字节流
- JAVA基础学习(二十)--IO流二-缓冲流、字节流
- Java IO学习笔记:字节流
- Java IO学习笔记:字节流
- Java IO学习笔记:字节流
- [学习笔记]Java IO之字节流
- java学习之IO字节流
- [学习笔记]Java IO之字节流
- Java基础-IO学习之字节流
- maven(三)
- django 重置admin密码
- 移动端meta标签
- js高级教程阅读笔记 第五章-引用类型(上)
- 代码混淆资料收集【转】
- java Io流学习(二) 字节流
- 最受欢迎的 15 大 Python 库
- 微信开发介绍
- 数据库SQL优化大总结之 百万级数据库优化方案
- 数据特征标准化方法
- 【LeetCode】7. Reverse Integer问题解析
- 牙齿模型分割算法应用于医疗正畸软件初步设计效果图
- vs2012中创建MFC找不到控件的问题
- 禅道的数据库