java__io__序列流(合并MP3)和对象序列化
来源:互联网 发布:网络大电影众筹平台 编辑:程序博客网 时间:2024/05/17 15:05
package day22;/*字节流输入字节流:-----------| InputStream 所有输入字节流的基类 抽象类-----------------| FileInputStream 读取文件数据的输入字节流-----------------| BufferedInputStream 缓冲输入字节流 该类出现的目的是为了提高读取文件 数据的效率。 这个类其实只不过是在内部维护了一个8kb的字节数组而已。输出字节流:-----------| OutputStream 所有输出字节流的基类。 抽象类。----------------| FileOutputStream 向文件输出数据的输出字节流 ----------------| BufferedOutputStream 缓冲输出字节流 该类出现的目的也是为了提高向文件写数据的效率。 这个类的也只不过是在内部维护了一个8kb的字节数组而已。字符流 : 字符流 = 字节流 + 编码(解码)输入字符流:---------| Reader 所有输入字符流的基类。 抽象类。----------------| FileReader 读取文件数据的输入字符流。 ----------------| BufferedReader 缓冲输入字符流 该类出现的目的是为了提高读取文件数据的效率与拓展FileReader的(readLine)功能。 这个类的也只不过是在内部维护了一个8kb的字符数组而已。输出字符流:---------| Writer 所有输出字符流的基类。 抽象类----------------| FileWriter 向文件输出数据的输出字符流 ----------------| BufferedWriter 缓冲输出字符流 该类出现的目的是为了提高写文件数据的效率与拓展FileWriter的(newLine)功能. */
package cn.itcast.other;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.Vector;/*SequenceInputStream(序列流)需求:把a.txt与b.txt 文件的内容合并。 */public class Demo1 { public static void main(String[] args) throws IOException { merge3(); } //把三个文件合并成一个文件 public static void merge3() throws IOException{ //找到目标文件 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"); //建立对应 的输入输出流对象 FileOutputStream fileOutputStream = new FileOutputStream(file4); FileInputStream fileInputStream1 = new FileInputStream(file1); FileInputStream fileInputStream2 = new FileInputStream(file2); FileInputStream fileInputStream3 = new FileInputStream(file3); //创建序列流对象 Vector<FileInputStream> vector = new Vector<FileInputStream>(); vector.add(fileInputStream1); vector.add(fileInputStream2); vector.add(fileInputStream3); Enumeration<FileInputStream> e = vector.elements(); SequenceInputStream sequenceInputStream = new SequenceInputStream(e); //读取文件数据 byte[] buf = new byte[1024]; int length = 0; while((length = sequenceInputStream.read(buf))!=-1){ fileOutputStream.write(buf,0,length); } //关闭资源 sequenceInputStream.close(); fileOutputStream.close(); }// 使用SequenceInputStream合并文件。 public static void merge2() throws IOException{ //找到目标文件 File inFile1 = new File("F:\\a.txt"); File inFile2 = new File("F:\\b.txt"); File outFile = new File("F:\\c.txt"); //建立数据的输入输出通道 FileOutputStream fileOutputStream = new FileOutputStream(outFile); FileInputStream fileInputStream1 = new FileInputStream(inFile1); FileInputStream fileInputStream2 = new FileInputStream(inFile2); //建立序列流对象 SequenceInputStream inputStream = new SequenceInputStream(fileInputStream1,fileInputStream2); byte[] buf = new byte[1024]; int length = 0 ; while((length = inputStream.read(buf))!=-1){ fileOutputStream.write(buf,0,length); } //关闭资源 inputStream.close(); fileOutputStream.close(); } //需求:把a.txt与b.txt 文件的内容合并。 public static void merge1() throws IOException{ //找到目标文件 File inFile1 = new File("F:\\a.txt"); File inFile2 = new File("F:\\b.txt"); File outFile = new File("F:\\c.txt"); //建立数据的输入输出通道 FileOutputStream fileOutputStream = new FileOutputStream(outFile); FileInputStream fileInputStream1 = new FileInputStream(inFile1); FileInputStream fileInputStream2 = new FileInputStream(inFile2); //把输入流存储到集合中,然后再从集合中读取 ArrayList<FileInputStream> list = new ArrayList<FileInputStream>(); list.add(fileInputStream1); list.add(fileInputStream2); //准备一个缓冲数组 byte[] buf = new byte[1024]; int length = 0 ; for(int i = 0 ; i< list.size() ; i++){ FileInputStream fileInputStream = list.get(i); while((length = fileInputStream.read(buf))!=-1){ fileOutputStream.write(buf,0,length); } //关闭资源 fileInputStream.close(); } fileOutputStream.close(); }}
package cn.itcast.other;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;/* 需求: 把一首mp3先切割成n份,然后再把这些文件合并起来。 */public class Demo2 { public static void main(String[] args) throws IOException {// cutFile(); mergeFlile(); } //合并 public static void mergeFlile() throws IOException{ //找到目标文件 File dir = new File("F:\\music"); //通过目标文件夹找到所有的MP3文件,然后把所有的MP3文件添加到vector中。 Vector<FileInputStream> vector = new Vector<FileInputStream>(); File[] files = dir.listFiles(); for(File file : files){ if(file.getName().endsWith(".mp3")){ vector.add(new FileInputStream(file)); } } //通过Vector获取迭代器 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(); } //切割MP3 public static void cutFile() 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(); }}
package cn.itcast.other;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;/* 对象的输入输出流 : 对象的输入输出流 主要的作用是用于写对象的信息与读取对象的信息。 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream .对象的输入流: ObjectInputStream ObjectOutputStream的使用步骤: 1. 对象输入输出流要注意的细节: 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接口。 */class Address implements Serializable{ String country; String city; public Address(String country,String city){ this.country = country; this.city = city; }}class User implements Serializable{ private static final long serialVersionUID = 1L; 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 Demo3 { 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(); //创建对象肯定要依赖对象所属 的class文件。 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(); }}
0 0
- java__io__序列流(合并MP3)和对象序列化
- IO流--文件切割合并&对象的序列化
- 关于序列化和对象流
- 对象流序列化
- 对象序列化和rtti
- 换转流和对象序列化
- 对象copy和序列化
- 合并(序列)流
- 黑马程序员-----IO之对象流和对象序列化
- 对象克隆和对象序列化
- 序列合并
- 合并序列
- Java IO流(对象序列化)
- java序列化(对象流)
- 黑马程序员——25,打印流,合并流,对象序列化,管道流,RandomAccessFile
- 黑马程序员——41,打印流,合并流,对象序列化,管道流,RandomAccessFile
- Hadoop 序列化对象(序列化和反序列化)
- C#对象XML序列化(一):序列化方法和常用特性
- C++面试题
- 看《暗杀》全智贤 去杀人都能美成神
- iOS国际化---跟随系统语言
- hdu5444 Elven Postman 二叉树建树
- CodeVS1394 数字串
- java__io__序列流(合并MP3)和对象序列化
- Android 绘图基础:Bitmap(位图)与Matrix(矩阵)实现图片5种操作(平移、旋转、错切、缩放、对称)
- ubuntu kylin上部署hadoop源码环境
- 自定义View3 仿联系人A-Z选择效果
- 0916_vbs加密与远程登录融合
- Android自定义控件打包,方便项目上使用
- 关于编程中人脑复杂度的设想,源于命名规则的对象细致化
- 提交按钮的使用
- IOS 刷新UItableView 中的行或组详细介绍