黑马程序员技术交流社区

标题: Java IO流问题 [打印本页]

作者: 操金成    时间: 2014-7-3 00:21
标题: Java IO流问题
BufferedInputStream(InputStream in),传递的参数是InputStream类型或其子类是吧,那么一下两个语句中那个是正确的,为什么?哪位大神能告诉我啊
ObjectInputStream os=new ObjectInputStream(new BufferedInputStream(new FileInputStream(file_i)));
BufferedInputStream in=BufferedInputStream(new ObjectInputStream(new FileInputStream(file_i)));
作者: xiaobo    时间: 2014-7-3 01:08
第二个是正确的,BufferedInputStream是字节流缓冲区,BufferedInputStream in=new BufferedInputStream()里面传递的参数是InputStream类型或其子类,可提高字节输出流的效率.
作者: EarlyHeart    时间: 2014-7-3 04:11
第二个是正确的ObjectInputStream是InputStream的子类

作者: 操金成    时间: 2014-7-3 07:28
ObjectInputStream(InputStream in)
          创建从指定 InputStream 读取的 ObjectInputStream。
这是我从jdk1.6中看到的,说明ObjectInputStream中传递的也是 InputStream
作者: 燿陚√揚葳    时间: 2014-7-3 12:25
这两种写法上都没有错,
ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream(fiel)));
BufferedInputStream oos=new BufferedInputStream (new ObjectInputStream(new FileInputStream(file)));
只要记得用ObjectOutputStream写入对象,就一定要用ObjectInputStream读取
不过第二种这么写好像没有什么意义啊
你看这段代码

  1. <P>class Person implements Serializable{
  2. private String name;
  3. private int age;
  4. Person(String name,int age){
  5. this.name=name;
  6. this.age=age;
  7. }
  8. public String toString(){
  9. return name+"*****"+age;
  10. }
  11. }
  12. public class Demo {
  13. public static void main(String[] args)throws Exception{
  14. // writeObject();
  15. readeObject();
  16. }
  17. public static void readeObject()throws Exception{</P>
  18. <P> </P>
  19. <P>//这是你写的第一种写法,就是在原来的基础上加了个缓冲
  20. ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("a.txt")));

  21. // ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt"));
  22. Person p=(Person)ois.readObject();
  23. sop(p);
  24. ois.close();
  25. }
  26. public static void writeObject()throws IOException{</P>
  27. <P> </P>
  28. <P>//这是你写的第二个把ObjectOutputStream加入缓冲,这里你就无法将一个对象序列化了,所以说这么写没有什么意义</P>
  29. <P>//这么写是没错的,只要是OutputStream或其子类就可以
  30. BufferedOutputStream oos=new BufferedOutputStream(new ObjectOutputStream(new FileOutputStream("a.txt")));
  31. // ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("a.txt"));
  32. oos.writeObject(new Person("lisi",25));</P>
  33. <P>oos.close();
  34. }
  35. public static void sop(Object obj){
  36. System.out.println(obj);
  37. }
  38. }</P>
复制代码





作者: 操金成    时间: 2014-7-3 18:51
对极了,感谢你

作者: SLJ_920808    时间: 2014-7-3 18:54
正确的应该是第二个ObjectInputStream是InputStream的子类。
作者: gyw520gyw    时间: 2014-7-3 19:39
哇 , 自己可以再编译器中验证一下!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2