Day 18:SequenceInputStream、合并切割mp3、对象输入输出流对象
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 stub
File 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 stub
File 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 stub
File 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;
}
@Override
public 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();
}
}
Day 18:SequenceInputStream、合并切割mp3、对象输入输出流对象的更多相关文章
- 对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)
对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流: Ob ...
- (JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)
对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流: Ob ...
- java 对象输入输出流
对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息. ObjectInputStream : 对象输入流 ...
- 对象输入输出流ObjectInputStream、ObjectOutputStream(对象的序列化与反序列化)
如题 所有关联的类需要继承Serializable 接口 文件为空,直接反序列化为发生错误; 毕竟对象为null , 序列化到文件里不是空空的! 以下笔记的原文连接: https://www.cnbl ...
- serialVersionUID序列化版本号与ObjectOutputStream对象输入输出流
1. 观察ObjectOutputStream 我们观察ObjectOutputStream就可以发现该类没有无参构造,只有有参构造,所以他是一个包装流 2. 具体使用: public static ...
- CString与输入输出流对象问题。
在C++ 编程出现:cin>>Id;没有与这些操作匹配的">>"运算符: 你要看你的Id的数据类型,如果是CString等字符串,要用cin.getline ...
- 输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)
对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流: Ob ...
- 《三》Java IO 字节输入输出流
那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream) ...
- Java IO详解(一)------字节输入输出流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
随机推荐
- Celery的常用知识
什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统.专注于实时处理的异步任务队列.同时也支持任务调度. Celery的架构由三部分组成,消息中间件(message ...
- Day4-F-产生冠军 HDU - 2094
有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C. 如果A打败了B,B又打败了 ...
- 51nod 1380:夹克老爷的逢三抽一
1380 夹克老爷的逢三抽一 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 取消关注 又到了诺德县的百姓孝敬夹克大老爷的日子,带着数量不等的铜板的村民 ...
- CentOS7 部署 Jupyter Notebook
socket.error: [Errno 99] Cannot assign requested address 修改这几处: 1.hostname 参考:https://www.cnblogs.co ...
- nodejs 编译时对项目进行配置
1.启动项目设置配置信息 2.读取项目配置文件 3.根据配置的文件读取自定义属性 4.根据相关属性配置其他差异 5.其他
- Java笔记--泛型
1.泛型解决元素存储的安全性问题:解决获取数据元素时,需要类型强转的问题. --泛型的核心思想:把一个集合中的内容限制为一个特定的数据类型. 2.泛型的使用 1)在集合中使用 2)自定义泛型类.泛型接 ...
- uboot前传
1.uboot到底是干嘛的 uboot主要作用是用来启动操作系统内核. uboot还要负责部署整个计算机系统. uboot中还有操作Flash等板子上硬盘的驱动. uboot还得提供一个命令行界面供人 ...
- Day6 - 牛客203E
https://ac.nowcoder.com/acm/contest/203/E 埋坑不会做
- Ubuntu 14.04 配置 VNC Server
用putty连接Linux后,如果会话断开,也会终止此会话在Linux执行的任务. 用WinSCP传输文件很方便,目前也只能传输文件. 按照以下步骤以及提示,安装VNC Server, 1.apt-g ...
- hadoop安装文档
一.准备 该准备工作在三台机器上都需要进行,首先使用 vmvare 创建 1 个虚拟机,这台虚拟机是 master,一会需要把 master 克隆出两台 slave 点确定然后开启此虚拟机 然后添加/ ...