【Java】IO字节流

来源:互联网 发布:手机荧光灯软件 编辑:程序博客网 时间:2024/05/17 03:11
<pre name="code" class="java">/**=====================字节流================================ * 知识点: * 1、节点流(低级流)和处理流(高级流)的区别,以及Java流式输入输出的架构特点: * 1)按照流是否直接与特定的地方 (如磁盘、内存、设备等) 相连,分为节点流和处理流两类。节点流可以从或向一个特定的地方(节点)读写数据; * 处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。 * 2)处理流的构造方法总是以一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。 * 3)javaIO流的读写是线性的,采用适配器和装饰设计模式 * 2、与RandomAccessFile区别在于RandomAccessFile的数据访问是随机的,而IO流是线性的 ===============================================================*/public class StreamIO {private static final long LEVEL = 20150701;//本码讲版本//========================================低级字节流======================================/** * FileOutPutStream 低级输出流 *///@Testpublic void testFOS() throws Exception {/** * 解析:原则上应使用格式二来使用FileOutputStream,即保证同时只有一个流在操作文件 * 但不是所有平台都支持同时使用多个流操作一个文件的(格式一) 但如过非要那样做,首先要确定平台支持,不支持构造方法会直接报错 * 其次要清楚,当使用多个流操作一个文件时,这些流将共享一个FileDescriptor * 即格式一的情况,每个流都将单独操作文件 */// +++++++++++++++书写格式一 使用多个流同时操作同一个文件 执行后文件内容为:覆盖内容m示例追加内容FileOutputStream out = new FileOutputStream("fos.txt");String str = "FileOutStream示例";byte[] data = str.getBytes();FileOutputStream out2 = new FileOutputStream("fos.txt", true);String str2 = "追加内容";byte[] data2 = str2.getBytes();FileOutputStream out3 = new FileOutputStream("fos.txt");String str3 = "覆盖内容";byte[] data3 = str3.getBytes();out.write(data);out.close();out2.write(data2);// out2采用追加写入操作out2.close();out3.write(data3);// out3采用覆盖式的写入操作out3.close();// ++++++++++++++++书写格式二 执行后文件内容为:覆盖内容// FileOutputStream out = new FileOutputStream("fos.txt");// String str = "FileOutStream示例";// byte[] data = str.getBytes();// out.write(data);// out.close();// FileOutputStream out2 = new FileOutputStream("fos.txt", true);// String str2 = "追加内容";// byte[] data2 = str2.getBytes();// out2.write(data2);// out2采用追加写入操作// out2.close();// FileOutputStream out3 = new FileOutputStream("fos.txt");// String str3 = "覆盖内容";// byte[] data3 = str3.getBytes();// out3.write(data3);// out3采用覆盖式的写入操作// out3.close();}/** * FileInputStream 低级输入流 */// @Testpublic void testFIS() throws Exception {FileInputStream in = new FileInputStream("fos.txt");byte[] buf = new byte[100];int len = in.read(buf);String str = new String(buf, 0, len);in.close();System.out.println(str);}/** * 使用低级流进行文件复制 */// @Testpublic void testIOCopy() throws Exception {FileInputStream in = new FileInputStream("fos.txt");FileOutputStream out = new FileOutputStream("copy_fos.txt");int len = -1;byte[] buf = new byte[1024 * 10];while ((len = in.read(buf)) != -1) {out.write(buf, 0, len);}in.close();out.close();}//============================================高级字节流================================================/** * BufferedInputStream * 包装低级流,为其增加缓存功能 使用一个内置的缓冲区帮助读写数据 * 这里实现文件的复制,移动文件操作只需要更改读写文件路径 *///@Testpublic void testBuffered() throws Exception {FileInputStream fileIn = new FileInputStream("jdbc.zip");FileOutputStream fileOut = new FileOutputStream("copy_jdbc.zip");BufferedInputStream bufIn = new BufferedInputStream(fileIn);BufferedOutputStream bufOut = new BufferedOutputStream(fileOut);int len = -1;while ((len = bufIn.read()) != -1) {bufOut.write(len);}//强制将缓冲区中的数据一次性写出,频繁调用会降低效率 close方法内部也调用了flush方法,应用实例:qq发消息bufOut.flush();bufIn.close();bufOut.close();}/* * ObjectOutputStream   序列化与反序列化 注意JavaBean的编写 * 对象输出流,作用:可以将java中的任何对象转化为一组字节后写出 * 从数据结构转化为字节的过程称为:序列化(就是java定义的一种编解码) * 将java中的对象转换为字节的过程:对象序列化  * 要序列化对象必须实现Serializable其属性中的引用类型也同样要实现,版本号:见Point * 把内存上的数据写入磁盘中做长久保存的过程成为:持久化 *///@Testpublic void testObjectOut() throws Exception{Point point = new Point(1,2);ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream("point.obj"));//将给定的对象转换为一组字节后写出,将来若处理的流是将数据发送给其他计算机,那么就会将该对象转换为字节后发送给其他计算机objOut.writeObject(point);objOut.close();}@Testpublic void testObjectIn() throws Exception{ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("point.obj"));Point point = (Point)objIn.readObject();System.out.println(point.toString());objIn.close();}}


                                             
0 0
原创粉丝点击