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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1黑马币
本帖最后由 xiaoqing 于 2015-11-29 16:37 编辑

深圳问答网又按时更新啦。这一期的问题比较奇怪:为什么不能直接用OutputStream来输出数据呢?为什么要由其他的各种子类才能完成输出。继承的子类,其实是对面向对象思想的正确应用哦,千万不要觉得麻烦。下面来看看问答网的回答吧:






学生的问题:

      代码里的底层流可以换成普通流OutputStream吗?若不能,为什么?
  1. public static String decodeStream(InputStream in) throws IOException {
  2.                
  3.                 //底层流
  4.                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
  5.                
  6.                 int len=0;
  7.                 byte[] buf = new byte[1024];
  8.                 while((len=in.read(buf))>0){
  9.                         baos.write(buf, 0, len);
  10.                 }
  11.                
  12.                 baos.close();
  13.                 //返回 字符 数据
  14.                 return baos.toString();
  15. }
复制代码
       老师回答:
1、不能,因为OutpuStream本身就是个抽象类,最重要的write方法是没有实现的。以下是从源码copy过来的。
  1. /**
  2.      * Writes a single byte to this stream. Only the least significant byte of
  3.      * the integer {@code oneByte} is written to the stream.
  4.      *
  5.      * @param oneByte
  6.      *            the byte to be written.
  7.      * @throws IOException
  8.      *             if an error occurs while writing to this stream.
  9.      */
  10.     public abstract void write(int oneByte) throws IOException;
复制代码

2、ByteArrayOutputStream是OutputStream的子类,它实现了Byte写入。
  1. /**
  2.      * Writes the specified byte {@code oneByte} to the OutputStream. Only the
  3.      * low order byte of {@code oneByte} is written.
  4.      *
  5.      * @param oneByte
  6.      *            the byte to be written.
  7.      */
  8.     @Override
  9.     public synchronized void write(int oneByte) {
  10.         if (count == buf.length) {
  11.             expand(1);
  12.         }
  13.         buf[count++] = (byte) oneByte;
  14.     }
复制代码

3、另外,底层流、普通流这种说法很奇怪,专业领域一般不会这么说。去找工作,这么说会让人觉得莫名其妙。一般都是直接读写英文,学习的时候注意记忆英语单词。


总结一下,就是OutputStream定义了write这些抽象方法,再由具体的子类去实现。这样的继承方式,子类可以关注自己具体的实现,每个

子类都有自己的具体功能。在自己设计API的时候,要正确根据事物的特性来采取不同的面向对象方法。



深圳校区除了全国独有问答网,就业老师面试服务,还有更多神秘惊喜等着你,咨询热线:0755-66689855


7 个回复

倒序浏览
谢谢老师 学习了~
回复 使用道具 举报
谢谢老师
回复 使用道具 举报
学到了OutputStream 和 InputStream 应该是类是的
回复 使用道具 举报
星晴。 来自手机 中级黑马 2015-12-1 22:35:30
报纸
让我又多了层理解
回复 使用道具 举报
问答网不错,因为OutputStream   是一个抽象类,所以要由它的了类具体实现
回复 使用道具 举报
Id_820 中级黑马 2015-12-6 21:16:43
7#
学习了, 求给分呀   
回复 使用道具 举报
学习了,谢谢老师
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马