201621123086 《Java程序设计》第12周学习总结

1. 本周学习总结

  • 自 Inputstream或Reader派生而来的类都含有名为read()的基本方法,用于读取单字节或字节数组。同样,任何自OutputStream或Writer派生而来的类都含有名为write()的基本方法,用于写单个字节或者字节数组.但是,我们通常不会用到这些方法。
  • 从不同数据源产生输入的类有对应的InputStream子类。
  • BufferedReader构造器,提供readLine()方法。
  • 用DateInputStream. 它是一个面向字节的I/O类,必须使用InputStream类

2. 面向系统综合设计-图书馆管理系统或购物车

2.1 简述如何使用流与文件改造你的系统。文件中数据的格式如何?

我使用的是BufferedWriter类与BufferedReader类,将书籍与用户的属性用空格间隔起来。数据以字符串的形式保存在.txt文件里。

2.2 简述系统中文件读写部分使用了流与文件相关的什么接口与类?为什么要用这些接口与类?

  • 读取时用到了File类,FileReader类、BufferedReader类,通过File创建文件对象,另两个类配合进行读取。
  • 写入文件用到了BufferedWriterOutputStreamWriterFileOutputStream

2.3 截图读写文件相关代码。关键行需要加注释




3. 代码量统计

3.1 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
1 0 0 0 0
2 0 0 0 0
3 619 619 15 15
4 619 0 15 0
5 973 354 25 10
6 1394 421 37 12
7 2001 607 43 6
8 4046 2045 54 11
9 4486 440 64 10
10 4808 322 67 3
11 4974 166 70 3
12 6118 1144 86 16
13 6454 336 92 6

选做:4. 流与文件学习指导

1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读)

1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔。使用Scanner或者BufferedReader将student.txt的数据读出。(截图关键代码,出现学号)


1.2 生成文件大小多少(使用右键文件属性查看)?分析该文件大小


英文字符、一位数字、占位符、小数点各占一字节;
换行两字节
总共13字节

1.3 如果调用PrintWriter的println方法,但在后面不close。文件大小是多少?为什么?

0字节

如果未调用close()关闭,则内容停留在缓冲区。


2. 缓冲流

2.1 使用PrintWriter往文件里写入1千万行(随便什么内容都行),然后对比使用BufferedReader与使用Scanner从该文件中读取数据的速度(只读取,不输出),使用哪种方法快?截取测试源代码,出现学号。请详细分析原因?提示:可以使用junit4对比运行时间

  • 原因在于BufferedReader缓冲区更大,减少了读取与输入次数。

2.2 将PrintWriter换成BufferedWriter,观察写入文件的速度是否有提升。记录两者的运行时间。试分析原因。

  • 原因同样在于BufferedWriter有更大的缓冲区。

4. 字节流、二进制文件:DataInputStream, DataOutputStream、ObjectInputStream

4.1 参考DataStream目录相关代码,尝试将三个学生对象的数据写入文件,然后从文件读出并显示。(截图关键代码,出现学号)

4.2 这里生成的文件和题目1生成的文件有何不一样?生成的文件有多大?分析该文件大小?将该文件大小和题目1生成的文件对比是大了还是小了,为什么?存储数据的时候,到底是二进制文件比较节省空间还是文本文件比较节省空间?使用二进制存储文件有何好处?

  • 明显相对较大
  • 一般来讲二进制文件较为节省空间
  • 优点在于:节省空间、读取速度快、存储较为精确

4.3 使用wxMEdit的16进制模式(或者其他文本编辑器的16进制模式)打开student.data,分析数据在文件中是如何存储的。


00 00 00 01对应数字1
00 03 61 61 61对应字符aaa
00 00 00 02对应数字2
3f f0 00 00 00 00 00 00对应数字1.0

4.4 使用ObjectInputStream(读), ObjectOutputStream(写)读写学生。(截图关键代码,出现学号) //参考ObjectStreamTest目录

8. 正则表达式

8.1 使用正则表达式判断给定的字符串是否是10进制数字格式?尝试编程进行验证,要给测试数据集及运行结果(可以转化为PTA)。(截图关键代码,出现学号)

8.2 解释自己编写的正则表达式。

首先,字符串"\"被编译器转义"",所以所有正则中出现的""要写为"\"
"-?\d+(\.\d+)?"
随后,"-?"中的"?"代表可以有一个前面的字符——负号,也可以没有;而“\d”则匹配一个数字字符;“+”匹配最少一个前面的字符;()?代表前面的子字段可以有一个,也可以没有;
子字段中,“\.”是小数点字符,其余的前面已经讲过。

8.3 选做:修改HrefMatch.java,尝试匹配网页中的数字字符串、匹配网页中的图片字符串。(可以转化为PTA)


ps.http://cec.jmu.edu.com/会出现java.net.UnknownHostException,暂时解决不了,所以用的原地址。
pps.对正则表达还是不太熟悉,只能做到这一步,应该是漏掉了一部分图片

posted @ 2017-12-09 15:59  pirrat  阅读(164)  评论(1编辑  收藏  举报