A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马戴帅军 中级黑马   /  2013-10-15 19:59  /  1400 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马戴帅军 于 2013-10-16 11:43 编辑
  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.io.SequenceInputStream;
  5. import java.util.Enumeration;
  6. import java.util.Vector;

  7. public class SequenceInputStreamDemo {

  8.         public static void main(String[] args) throws IOException {

  9.                 /*
  10.                  * 需求:将1.txt 2.txt  3.txt文件中的数据合并到一个文件中。
  11.                  */
  12.                
  13.                 Vector<FileInputStream> v=new Vector<FileInputStream>();
  14.                
  15.                
  16.                 v.add(new FileInputStream("1.txt"));
  17.                 v.add(new FileInputStream("2.txt"));
  18.                 v.add(new FileInputStream("3.txt"));
  19.                
  20.                 Enumeration<FileInputStream> en =v.elements();
  21.                
  22.                 SequenceInputStream sis =new SequenceInputStream(en);
  23.                
  24.                 FileOutputStream fos =new FileOutputStream("4.txt");
  25.                
  26.                 byte [] buf =new byte[1024];
  27.                
  28.                 int len =0;
  29.                
  30.                 while((len=sis.read(buf))!=-1){
  31.                         
  32.                         
  33.                         fos.write(buf,0,len);
  34.                 }
  35.                
  36.                 fos.close();
  37.                 sis.close();        
  38.         }

  39. }
复制代码
这是毕老师课上讲的代码。但是我的演示结果和毕老师的不太一样。
我的演示结果是合并文件的时候,之间并没有换行。
请大家看看是什么问题。
还有就是Serializable这个方法,在什么时候使用?
tansient和static关键字如何区别?

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

1 个回复

正序浏览
1."我的演示结果是合并文件的时候,之间并没有换行。"其实是因为你每个文件的末尾没有换行导致的,SequenceInputStream在融合文件的时候是不会在每个文件的开头换行的。
2.Serializable不是方法是个接口,他是一个类可序列化的标识,当你要把堆内存中创建的对象保存起来的时候需要对类进行序列化操作,这个时候这个需要被序列化的类就要实现Serializable接口。
3.tansient是可以让不想序列化的字段不进行序列化,反序列化得到null值,静态方法存在于静态方法区内,而序列化只对堆内存中的数据进行,所以不会序列化静态的字段,这两个都可以防止序列化,一般而言tansient更常用。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马