第六周学习总结

教材学习内容总结

- 流与IO

流的概念和作用

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

IO流的分类
  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流和输出流

字符流和字节流

字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。

字节流和字符流的区别:读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

输入流和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流

Java IO流对象

1.输入字节流InputStreamIO 中输入字节流的继承

1.InputStream 是所有的输入字节流的父类,它是一个抽象类。

2.ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。

3.ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。

2.输出字节流OutputStream

1.OutputStream 是所有的输出字节流的父类,它是一个抽象类。

2.yteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,

3.ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。

File类

File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。

RandomAccessFile类

该对象并不是流体系中的一员,其封装了字节流,同时还封装了一个缓冲区(字符数组),通过内部的指针来操作字符数组中的数据。 该对象特点:

该对象只能操作文件,所以构造函数接收两种类型的参数:a.字符串文件路径;b.File对象。
该对象既可以对文件进行读操作,也能进行写操作,在进行对象实例化时可指定操作模式(r,rw)

InputStream与OutputStream

想活用输入/输出API,一定要先了解Java中如何以串流(Stream)抽象化输入/输出概念,以及InputStream、OutputStream继承架构。如此一来,无论标准输入/输出、文档输入/输出、网络输入/输出、数据库输入/输出等都可用一致的操作进行处理。

串流设计的概念

Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象。比喻来说,数据就好比水,串流好比水管,通过水管的衔接,水由一端流向另一端,

InputStream用来进行数据读取,而OutputStream用来进行数据写入。接口描述

 public abstract class InputStream implements Closeable {
     public abstract int read() throws IOException;
     public int read(byte b[]) throws IOException;
     public int read(byte b[], int off, int len) throws IOException;
     public long skip(long n) throws IOException;
     public void close() throws IOException;
     public synchronized void mark(int readlimit);
     public synchronized void   reset() throws IOException;
     //...
 }

 Public abstract class OutputStream implements Closeable, Flushable {
    public abstract void write(int b) throws IOException;
    public void write(byte b[]) throws IOException;
    public void write(byte b[], int off, int len) throws IOException;
    public void flush() throws   IOException;
    public void close() throws IOException;
}

Reader与Writer继承架构

针对字符数据的读取,Java SE提供了java.io.Reader类,其抽象化了字符数据读入的来源。

针对字符数据的写入,则提供了java.io.Writer类。其抽象化了数据写出的目的地。

-StringReader可以将字符串打包,当作读取来源,StringWriter则可以作为写入目的地,最后用toString()取得所有写入的字符组成的字符串。

FileReader、FileWriter则可以对文档做读取与写入,读取或写入时默认会使用操作系统默认编码来做字符转换。
在启动JVM时,可以指定-Dfile.encoding来指定FileReader、FileWriter所使用的编码。

1.InputStreamReader与OutputStreamWriter

InputStreamReader、OutputStreamWriter对串流数据打包。
2.BufferedReader与BufferedWriter

BufferedReader、BufferedWriter可对Reader、Writer提供缓冲区作用,在处理字符输入/输出时,对效率也会有所帮助。
3.PrintWriter

PrintWriter、PrintStream使用上极为类似,不过除了可以对OutputStream打包之外,PrintWriter还可以对Writer进行打包,提供print()、println()、format()等方法。 11.1线程

教材学习中的问题和解决过程

System.SetIn(new FileInputStream(args[0])); 方法名称首字母大写会出现错误,setIn()这里的setIn是属于关键字还是方法名称的书写规范影响呢?

代码调试中的问题和解决过程

问题1:XXXXXX

问题1解决方案:XXXXXX

问题2:XXXXXX

问题2解决方案:XXXXXX

代码托管


上周考试错题总结

  • CH06填空:父类和子类要有(ISA 或“是一种”)关系

  • CH06判断:可以用父类声明对象引用,用子类生成对象,但需要强制类型转换。(X)

  • CH06填空:Java中通过(继承)和接口实现多态。

  • CH06判断:父类中有个public void fight(),子类中有个public void fight( Weapon w),这两个方法的关系是Override.(X)

  • CH06填空:标注(@Override)可以从语法上保证方法的Override.

结对及互评

评分标准

  • 正确使用Markdown语法(加1分):

  • 不使用Markdown不加分

  • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)

  • 排版混乱的不加分

  • 模板中的要素齐全(加1分)

  • 缺少“教材学习中的问题和解决过程”的不加分

  • 缺少“代码调试中的问题和解决过程”的不加分

  • 代码托管不能打开的不加分

  • 缺少“结对及互评”的不能打开的不加分

  • 缺少“上周考试错题总结”的不能加分

  • 缺少“进度条”的不能加分

  • 缺少“参考资料”的不能加分

  • 教材学习中的问题和解决过程, 一个问题加1分

  • 代码调试中的问题和解决过程, 一个问题加1分

  • 本周有效代码超过300分行的(加2分)

  • 一周提交次数少于20次的不加分

其他加分:

  • 周五前发博客的加1分

  • 感想,体会不假大空的加1分

  • 排版精美的加一分

  • 进度条中记录学习时间与改进情况的加1分

  • 有动手写新代码的加1分

  • 课后选择题有验证的加1分

  • 代码Commit Message规范的加1分

  • 错题学习深入的加1分

  • 点评认真,能指出博客和代码中的问题的加1分

  • 结对学习情况真实可信的加1分

扣分:

  • 有抄袭的扣至0分

  • 代码作弊的扣至0分

  • 迟交作业的扣至0分

点评过的同学博客和代码

其他(感悟、思考等,可选)

xxx
xxx

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第六周 400/1021 1/9 30/90

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:21小时

  • 实际学习时间:10小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted on 2017-04-02 00:40  吕宇轩  阅读(337)  评论(7编辑  收藏  举报