SequenceInputStream用例题讲述用法

需求:1.把a.txt与b.txt 文件的内容合并

   2.把a.txt与b.txt 、c.txt文件的内容合并

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;public class Demo1 {public static void main(String[] args) throws IOException {fangfa1();}private static void fangfa1() throws IOException {// TODO Auto-generated method stubFile file1 = new File("F:\\a.txt");File file2 = new File("F:\\b.txt");File file3 = new File("F:\\c.txt");FileInputStream filein1 = new FileInputStream(file1);FileInputStream filein2 = new FileInputStream(file2);FileOutputStream fileout3 = new FileOutputStream(file3);ArrayList<FileInputStream> list = new ArrayList<FileInputStream>();list.add(filein1);list.add(filein2);byte[] buf = new byte[1024];int content;for(int i = 0;i < list.size();i++) {FileInputStream filein = list.get(i);while((content = filein.read(buf))!=1) {fileout3.write(buf, 0, content);}filein.close();}fileout3.close();}
}

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;public class Demo2 {public static void main(String[] args) throws IOException {fangfa1();}private static void fangfa1() throws IOException {// TODO Auto-generated method stubFile file1 = new File("F:\\a.txt");File file2 = new File("F:\\b.txt");File file3 = new File("F:\\c.txt");FileInputStream filein1 = new FileInputStream(file1);FileInputStream filein2 = new FileInputStream(file2);FileOutputStream fileout3 = new FileOutputStream(file3);SequenceInputStream sinput = new SequenceInputStream(filein1, filein2);byte[] buf = new byte[1024];int content;while((content = sinput.read(buf))!=1) {fileout3.write(buf, 0, content);}sinput.close();fileout3.close();}
}

//第二题

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;public class Demo3 {public static void main(String[] args) throws IOException {fangfa1();}private static void fangfa1() throws IOException {// TODO Auto-generated method stubFile file1 = new File("F:\\a.txt");File file2 = new File("F:\\b.txt");File file3 = new File("F:\\c.txt");File file4 = new File("F:\\d.txt");FileInputStream filein1 = new FileInputStream(file1);FileInputStream filein2 = new FileInputStream(file2);FileInputStream filein3 = new FileInputStream(file3);FileOutputStream fileout4 = new FileOutputStream(file4);Vector<FileInputStream> vector = new Vector<FileInputStream>();vector.add(filein1);vector.add(filein2);vector.add(filein3);Enumeration<FileInputStream> it = vector.elements();SequenceInputStream sinput = new SequenceInputStream(it);byte[] buf = new byte[1024];int content;while((content = sinput.read(buf))!=1) {fileout4.write(buf, 0, content);}sinput.close();fileout4.close();}
}

上题第三段代码用Vector集合的原因是在SequenctInputStream中有一个带参数的构造方法调用的是Vector的迭代器!

需求: 把一首mp3先切割成n份,然后再把这些文件合并起来。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;public class Demo4 {public static void main(String[] args) throws IOException {//jianqie();//剪切hebing();//合并
    }public static void hebing() throws IOException{File dir = new File("F:\\music");Vector<FileInputStream> vector = new Vector<FileInputStream>();File[] files = dir.listFiles();for(File file : files){if(file.getName().endsWith(".mp3")){vector.add(new FileInputStream(file));}}Enumeration<FileInputStream> e = vector.elements();SequenceInputStream inputStream = new SequenceInputStream(e);FileOutputStream fileOutputStream = new FileOutputStream("F:\\合并.mp3");byte[] buf = new byte[1024];int length = 0 ; while((length =  inputStream.read(buf))!=-1){fileOutputStream.write(buf,0,length);}fileOutputStream.close();inputStream.close();}public static void jianqie() throws IOException{File file = new File("F:\\1.mp3");File dir = new File("F:\\music");FileInputStream fileInputStream = new FileInputStream(file);byte[] buf = new byte[1024*1024];int length = 0;for(int i = 0 ;  (length = fileInputStream.read(buf))!=-1 ; i++){FileOutputStream fileOutputStream =    new FileOutputStream(new File(dir,"part"+i+".mp3"));fileOutputStream.write(buf,0,length);fileOutputStream.close();}fileInputStream.close();}
}

对象的输入输出流 : 对象的输入输出流主要的作用是用于写对象的信息与读取对象的信息。 对象信息一旦写到文件上那么对象的信息就可以做到持久化了
  对象的输出流: ObjectOutputStream .
  对象的输入流: ObjectInputStream

ObjectOutputStream的使用步骤:
   对象输入输出流要注意的细节:
      1. 如果对象需要被写出到文件上,那么对象所属的类必须要实现Serializable接口。 Serializable接口没有任何的方法,是一个标识接口而已。
      2. 对象的反序列化创建对象的时候并不会调用到构造方法的、
      3. serialVersionUID 是用于记录class文件的版本信息的,serialVersionUID这个数字是通过一个类的类名、成员、包名、工程名算出的一个数字。
      4. 使用ObjectInputStream反序列化的时候,ObjeectInputStream会先读取文件中的serialVersionUID,然后与本地的class文件的serialVersionUID
          进行对比,如果这两个id不一致,那么反序列化就失败了。
      5. 如果序列化与反序列化的时候可能会修改类的成员,那么最好一开始就给这个类指定一个serialVersionUID,如果一类已经指定的serialVersionUID,然后
          在序列化与反序列化的时候,jvm都不会再自己算这个 class的serialVersionUID了。
      6. 如果一个对象某个数据不想被序列化到硬盘上,可以使用关键字transient修饰。
      7. 如果一个类维护了另外一个类的引用,那么另外一个类也需要实现Serializable接口。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;class Address implements Serializable{String country; String city;public Address(String country,String city){this.country = country;this.city = city;}
}class User implements Serializable{String userName ;String password;transient int age;// transient 透明
    Address address ;public User(String userName , String passwrod) {this.userName = userName;this.password = passwrod;}public User(String userName , String passwrod,int age,Address address) {this.userName = userName;this.password = passwrod;this.age = age;this.address = address;}@Overridepublic String toString() {return "用户名:"+this.userName+ " 密码:"+ this.password+" 年龄:"+this.age+" 地址:"+this.address.city;}
}public class Demo5 {public static void main(String[] args) throws IOException, Exception {writeObj();//readObj();
    }//把文件中的对象信息读取出来public static void readObj() throws  IOException, ClassNotFoundException{//找到目标文件File file = new File("F:\\obj.txt");//建立数据的输入通道FileInputStream fileInputStream = new FileInputStream(file);//建立对象的输入流对象ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);//读取对象信息User user = (User) objectInputStream.readObject(); System.out.println(user);}//定义方法把对象的信息写到硬盘上public static void writeObj() throws IOException{//把user对象的信息持久化存储。Address address = new Address("中国","广州");User user = new User("admin","123",15,address);//找到目标文件File file = new File("F:\\obj.txt");//建立数据输出流对象FileOutputStream fileOutputStream = new FileOutputStream(file);//建立对象的输出流对象ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);//把对象写出
        objectOutputStream.writeObject(user);//关闭资源
        objectOutputStream.close();}
}

转载于:https://www.cnblogs.com/JYDesigner/p/9414646.html

Day 18:SequenceInputStream、合并切割mp3、对象输入输出流对象相关推荐

  1. 【Java】day21--装饰者设计模式、序列流对象、对象输入输出流、Properties配置文件部分知识点总结

    (一)继承增强一个类的功能 BufferedReader    对FileReader拓展了一个功能,readLine. 需求1:编写一个类对BufferedReader的功能进行增强,增强其read ...

  2. java 对象读写_java 对象输入输出流读写文件的操作实例

    java 对象输入输出流读写文件的操作实例 java 支持对对象的读写操作,所操作的对象必须实现Serializable接口. 实例代码: package vo; import java.io.Ser ...

  3. Java对象输入输出流示例

    ObjectInputStream:对象输入流 ObjectOutputStream:对象输出流 Serializable:要序列化的对象必须实现此序列化接口,但此接口没有方法需要实现,只是作为一个标 ...

  4. java 对象流_java 对象流的简单使用

    对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息. 使得对象持久化. ObjectInputStream   : 对象输入流 ObjectOutPutStream  :对象输出流 简单的 ...

  5. C++学习笔记:(九)输入/输出流

    目录 9.输入/输出流 9.1C++流类库简介 9.2输入/输出流 9.3自定义类型的输入/输出 9.4文件输入/输出 9.输入/输出流 数据的输入.输出是最重要的操作,C++ 的输入.输出有 ios ...

  6. 【Java学习笔记十】输入输出流

    在Java.io包中提供了一系列用于处理输入/输出的流类.从功能上分为两类:输入流和输出流.从六结构上可分为:字节流(以字节为处理单位)和字符流(以字符为处理单位). 字符是由字节组成.在Java中所 ...

  7. java 字节输出流_Java IO详解(三)------字节输入输出流

    那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream) 1.字 ...

  8. c++ IO流---输入输出流 格式控制字符

    流:若干字节数据从一端到另一端我们叫做流 例:操作文件,从程序到文件,数据的流动的操作称为流操作 流类体系 专门处理输入输出流.字符流.文件流,包含有: 流对象 流运算符 >>  < ...

  9. C++文件输入/输出流类

    文章目录 文件输入/输出流类 表5: 文件读写模式 表6:ios_base 标识的组合意义 ofstream:写入文件的流类 例8:输出文本文件 例9:输出二进制文件 ifstream:从文件中读取的 ...

最新文章

  1. 求数的绝对值一定是正数_「口袋数学」绝对值的几何意义探究及应用,培优课程...
  2. Android开发之Serializable 和 Parcelable的区别(源代码分享)
  3. Windows系统Pycharm软件重置设置,恢复默认设置方法介绍
  4. 【问链-EOS公开课】第十课 EOS 错误码整理
  5. 坑爹的属性,android:descendantFocusability用法简析
  6. 转 最小凸包算法(Convex Hull)(1)-Graham扫描法 -计算几何-算法导论
  7. 2020年中国基层医疗研究报告
  8. 【Java并发编程:volatile关键字之解析】
  9. Java中的Class类
  10. 「leetcode」486. 预测赢家:【三种递归+动态规划】由浅入深,步步到位
  11. oracle日期函数2!
  12. 面向终端计算机网络的应用原理,山东科技大学计算机网络原理及应用复习提纲.doc...
  13. mac ant编译android,mac 下Android及ant的环境变量配置
  14. Rhino基础教程---三管混接
  15. 计网实验三 虚拟局域网 VLAN
  16. Ubuntu 16.10 下 使用 C/C++ IDE anjuta 编译出现You must have `libtool' installed
  17. 程序 卡塔_卡塔斯码
  18. 年终固定资产大盘点的具体步骤
  19. QML之ubuntu下编译安装虚拟键盘中文输入法
  20. 选择题库中的试题动态生成试卷(word格式)

热门文章

  1. 文艺水彩国风个人简历PPT模板
  2. The Definitive Guide to Jython¶
  3. JavaScript思维导图-基础篇
  4. Swin UNETR: Swin Transformers for Semantic Segmentation of Brain Tumors in MRI Images
  5. 创业十八般武器 第一辑
  6. html怎么插入flash,Dreamweaver如何插入flash动画
  7. mt管理器修改域名对接apk壳修改方法反编译白菜视频教程
  8. 2020面试美团的朋友看过来,牛客网搜集整理2018—2020美团面筋需要的自行领取
  9. 专科学计算机真的没用吗,为什么有人说专科生不受人待见?专科生真的没有出路吗?...
  10. iApp蓝白软件库程序源码+最新版的