黑马程序员技术交流社区
标题: [深圳特色][问答网]为什么不能直接用OutputStream输出? [打印本页]
作者: 深圳黑马程序员 时间: 2015-11-29 16:10
标题: [深圳特色][问答网]为什么不能直接用OutputStream输出?
本帖最后由 xiaoqing 于 2015-11-29 16:37 编辑
深圳问答网又按时更新啦。这一期的问题比较奇怪:为什么不能直接用OutputStream来输出数据呢?为什么要由其他的各种子类才能完成输出。继承的子类,其实是对面向对象思想的正确应用哦,千万不要觉得麻烦。下面来看看问答网的回答吧:
学生的问题:
代码里的底层流可以换成普通流OutputStream吗?若不能,为什么?- public static String decodeStream(InputStream in) throws IOException {
-
- //底层流
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- int len=0;
- byte[] buf = new byte[1024];
- while((len=in.read(buf))>0){
- baos.write(buf, 0, len);
- }
-
- baos.close();
- //返回 字符 数据
- return baos.toString();
- }
复制代码 老师回答:
1、不能,因为OutpuStream本身就是个抽象类,最重要的write方法是没有实现的。以下是从源码copy过来的。
- /**
- * Writes a single byte to this stream. Only the least significant byte of
- * the integer {@code oneByte} is written to the stream.
- *
- * @param oneByte
- * the byte to be written.
- * @throws IOException
- * if an error occurs while writing to this stream.
- */
- public abstract void write(int oneByte) throws IOException;
复制代码
2、ByteArrayOutputStream是OutputStream的子类,它实现了Byte写入。
- /**
- * Writes the specified byte {@code oneByte} to the OutputStream. Only the
- * low order byte of {@code oneByte} is written.
- *
- * @param oneByte
- * the byte to be written.
- */
- @Override
- public synchronized void write(int oneByte) {
- if (count == buf.length) {
- expand(1);
- }
- buf[count++] = (byte) oneByte;
- }
复制代码
3、另外,底层流、普通流这种说法很奇怪,专业领域一般不会这么说。去找工作,这么说会让人觉得莫名其妙。一般都是直接读写英文,学习的时候注意记忆英语单词。
总结一下,就是OutputStream定义了write这些抽象方法,再由具体的子类去实现。这样的继承方式,子类可以关注自己具体的实现,每个
子类都有自己的具体功能。在自己设计API的时候,要正确根据事物的特性来采取不同的面向对象方法。
深圳校区除了全国独有问答网,就业老师面试服务,还有更多神秘惊喜等着你,咨询热线:0755-66689855
作者: Weidan 时间: 2015-11-29 22:13
谢谢老师 学习了~
作者: 1018chenhaiyang 时间: 2015-11-30 12:07
谢谢老师
作者: 年强 时间: 2015-11-30 23:04
学到了OutputStream 和 InputStream 应该是类是的
作者: 星晴。 时间: 2015-12-1 22:35
让我又多了层理解
作者: 雨来 时间: 2015-12-3 21:00
问答网不错,因为OutputStream 是一个抽象类,所以要由它的了类具体实现
作者: Id_820 时间: 2015-12-6 21:16
学习了, 求给分呀
作者: ghb609840612 时间: 2016-1-5 11:39
学习了,谢谢老师
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |