Java的IO流_每天小小的改变,可以改变世界!
来源:互联网 发布:新的邮政软件 编辑:程序博客网 时间:2024/05/22 16:48
Java流式输入/输出原理
概念:用以获取不同种类的数据,程序中通过标准的方法输入或输出数据
1、输入/输出流的分类
按照数据流的方向可以分为输入流和输出流。
按照处理数据单位不同可以分为字节流和字符流。
按照功能不同可以分为节点流和处理流。
1.1、站在程序的角度上来说:字节流分为原文件指向程序读取的为输入流,反之
1.2、原始数据叫做字节流,字符流是一个字节一个字节的读
1.3、以Stream结尾的全是字节流,最原始的读取数据关系。
<————————分割线———————————->
节点流和处理流
1、节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)
2、处理流是“连接在已存在的流”(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
3、InputStream
概念:继承自InputStream的流都是用于向程序中输入数据的单位为字节(8bit);深色的为节点流,浅色的为处理流。
4、OutputStream
继承自OutputStream的流是用于程序中输入数据,且数据的单位为字节(8bit);深色为节点流,浅色为处理流。
5、Reader
继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit)深色为节点流,浅色为处理流。
6、访问文件
FileInputStream和FileOutputStream分别继承来自InputStream和OutoutStream,用于向文件中输入和输出字节。
public class TestFileWriter { public static void main(String[] args) { FileReader fr=null; int c=0; try { fr=new FileReader("E:/Android开发/workspace_从入门到精通" + "/hk_09/src/com/itheima/Student/TestFileWriter.java"); int in=0; while ((c=fr.read())!=-1) { System.out.println(c); } fr.close(); } catch (Exception e) { System.out.println("找不到指定路径"+e.getMessage()); } } }
7、缓冲流
缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率
public class TestFileWriter { public static void main(String[] args) { int c=0; try { FileInputStream fr=new FileInputStream("E:/Android开发/workspace_从入门到精通" + "/hk_09/src/com/itheima/Student/TestFileWriter.java"); BufferedInputStream bf = new BufferedInputStream(fr); try { System.out.println((char)bf.read()); bf.mark(100);// 直接读标记为100的信息 for (int i = 0; i <=10 &&(c=bf.read())!=-1; i++) { System.out.print((char)c+""); } System.out.println(); bf.reset();// 返回标记点 for (int i = 0; i <=10 &&(c=bf.read())!=-1; i++) { System.out.print((char)c+""); } bf.close(); fr.close(); } catch (FileNotFoundException e) { e.printStackTrace();} }catch (IOException e) { e.printStackTrace(); } }}
8、转换流
1、InputStreamReader和OutputStreamWriter用于字节数据到字符数据之前的转换
2、InputStreamReader需要和InputStream“套接”。
3、OutputStreamReader需要和OutputStream“套接”。
4、转换流在构造时可以指定其编码集合,例如:
InputStream isr=newInputStreamReader(System.in,“ISO8859_1”)
InputStreamReader将字节流转换成字符流。是字节流通向字符流的桥梁。若不指定字符编辑码,则默认GBK。
9、数据流
1、DataInputStream 和DataOutStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。
2、建议先写进去的数据最好是在读的时候先读
public class TesrtDataStream { public static void main(String[] args) { ByteArrayOutputStream bos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(bos); try { dos.writeDouble(Math.random()); dos.writeBoolean(true); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); System.out.println(bis.available()); DataInputStream dis=new DataInputStream(bis); //先写进去的先读出来 System.out.println(dis.readDouble()); System.out.println(dis.readBoolean()); dos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); } } }
10、Object流(也叫序列化)
1、直接将Object写入或读出
2、transient关键字:序列化对象的时候,这个属性就不会序列化到指定的目的地中
public static void main(String[] args) { T t = new T(); try { FileOutputStream fos=new FileOutputStream("d:/bak/java.dat"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(t); oos.flush(); oos.close(); FileInputStream fis = new FileInputStream("d:/bak/java.dat"); ObjectInputStream ois = new ObjectInputStream(fis); T tr = (T) ois.readObject(); System.out.println(t.d+"---"+"---"+t.s+"-----"+t.k); } catch (Exception e) { e.printStackTrace(); } } } class T implements Serializable{ int j=9; double d=2.3; String s="Hello Wrold"; transient int k=25;}
- Java的IO流_每天小小的改变,可以改变世界!
- 小小的改变
- (原创)对象转型实例___每一个小小的改变,都有可能改变世界。
- 改变世界的Wiki
- 点评改变Java世界的十大人物
- 改变Java世界的十大人物
- 改变Java世界的十大人物
- 7个改变世界的Java项目
- 7个改变世界的Java项目
- 7个改变世界的Java项目
- 7个改变世界的Java项目
- 7个改变世界的Java项目
- 7个改变世界的Java项目 .
- 7个改变世界的Java项目
- 7个改变世界的Java项目
- 改变世界的几个java项目
- 7个改变世界的Java项目
- 7个改变世界的Java项目
- (二)洞悉linux下的Netfilter&iptables:内核中的ip_tables小觑
- ubuntu16.04 Error: libcudart.so.7.5: cannot open shared object file: No such file or directory最新解决方案
- 二分法查找详细讲解
- Android列表侧滑删除就是这么简单
- 代码中高度、宽度的单位
- Java的IO流_每天小小的改变,可以改变世界!
- springboot activiti工作流简单示例
- AR—xcode开发3D模型单位问题
- ubuntu配置shadowsocks qt5记录一下
- Linux多线程编程讲解之系列三
- c#partial关键字用法
- Lambda Expressions Advance--Use Case(java8)
- 八大排序算法
- UVA725 Division【暴力枚举】