教材学习内容总结
- 流与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小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)