本帖最后由 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
|