Java 中的数据流:
对于某问题:将一个 long 类型的数据写到文件中,有办法吗?
转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换.
现在,Java 中的数据流能够很好的解决这个问题(不需要转换,直接写进去)
1. DataInputStream 与 DataOutputStream 分别继承自 InputStream、OutputStream, 它属于处理流,需要分别套接在 InputStream、OutputStream 类型的节点流上面.
2. DataInputStream 与 DataOutputStream 提供了可以存取与机器无关的 java 原始类型数据(如:int, double 等)的方法.
3. DataInputStream 与 DataOutputStream 的构造方法为:
DataInputStream(InputStream in )
DataOutputStream(OutputStram out)
【注】UTF(Unicode 字符串):网络上经常使用;UTF-8 比 UTF-16 省空间.
Demo_1:
import java.io.*; class Test { public static void main(String[] args) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 首先在内存上面分配一个字节数组,某根管道接上去(接在内存上面的一块内容上面) DataOutputStream dos = new DataOutputStream(baos); // baos管道不好用,外那再套接一根管道dos try { dos.writeDouble(Math.random()); dos.writeBoolean(false); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); // 通过baos的toByteArray()就能够拿到关于这个数组的引用 System.out.println(bais.available()); // bais中有多少个字节可供读; DataInputStream dis = new DataInputStream(bais); // 从字节数组中读的时候,里面是什么(字符串吗?...不清楚),故需要再套接一层管道 System.out.println(dis.readDouble()); // 先写先读 System.out.println(dis.readBoolean()); dos.close(); baos.close(); dis.close(); bais.close(); } catch (IOException e) { e.printStackTrace(); } } }
运行结果:
9
0.1088353250890215
false