(1)一个人只要自己不放弃自己,整个世界也不会放弃你. (2)天生我才必有大用 (3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟. (4)做难事必有所得 (5)精神乃真正的刀锋 (6)战胜对手有两次,第一次在内心中. (7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
它们的父类是FilterOutputStream和FilterInputStream说明它们也不是直接与文件打交道的。
package com.javareview.io.stream.datastream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 数据流 */ public class DataStream { public static void main(String[] args) throws IOException { // s1.从过滤流与节点流的角度去理解代码 // s2.FileOutputStream是节点流,可以直接与文件打交道的,节点流可以直接与外设、与网络、与键盘打交道 DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.txt"))); int a = 100; float b = 1000f; // s3.此处写入的不是一个变量的信息,而是写的一个整数。 dos.writeInt(a); dos.writeFloat(b); dos.close(); // s4.注意读与写的顺序一定要保持一致。 DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("data.txt"))); int ia = dis.readInt(); float ib = dis.readFloat(); System.out.println(ia); System.out.println(ib); dis.close(); } }单例 策略 代理与动态代理 观察者
最根本的原因是与它的目标是有关系的,读数组与读文件肯定是不一样的,从键盘读,提供的实现方式,肯定是不一样的,父类提供了实现是没有意义的。调用时由具体的子类去决定读取方法。
package com.javase.io2; import java.io.IOException; import java.io.InputStream; public class MyOwnStream1 { public static void main(String[] args) throws IOException { byte[] b = new byte[16]; for(int i = 0 ; i < b.length; i++){ b[i] = (byte)i; } MyByteArrayInputStream mbais = new MyByteArrayInputStream(b); while(true){ int c = mbais.read(); if(c < 0){ break; }else{ System.out.print(c+" "); } } System.out.println(); } } class MyByteArrayInputStream extends InputStream{ protected byte[] data; protected int ptr = 0; public MyByteArrayInputStream(byte[] data){ this.data = data; } //每次读取一个字节,然后返回来所读取的字节,偏移量指向下一个字节,如果没有读到,返回一个-1, @Override public int read() throws IOException { return (ptr < data.length) ? (data[ptr++]) : -1; } }