201621123062《java程序设计》第12周作业总结
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。
思维导图:

2. 面向系统综合设计-图书馆管理系统或购物车
使用流与文件改造你的图书馆管理系统或购物车。
2.1 简述如何使用流与文件改造你的系统。文件中数据的格式如何?
简述:
购物车:在控制台商城里的物品写入文件然后在增删物品的时候也要对文件进行修改
数据格式:十六进制
2.2 简述系统中文件读写部分使用了流与文件相关的什么接口与类?为什么要用这些接口与类?
接口:Serializable接口
类: ObjectOutputStream
原因:使用对象流是因为发现要写入的应该是物品,这是一个对象,所以用对象流。
使用Serializable接口是因为我想把商品类的物品写进文件用于存储数据,一开始直接使用了ObjectOutputStream ,但是在运行的时候系统报错了
后来问了一下大佬,说是需要Serializable接口,并且应该是存的类(即商品类)实现这个接口,然后程序就不会报错了
查找了一下这个接口的资料:
1.所谓的Serializable,就是java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了。这样子,任何类型只要实现了Serializable接,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。
2.实现java.io.Serializable 接口的类是可序列化的
个人理解:可序列化的类实现了Serializable接口就可以保存到文件中
2.3 截图读写文件相关代码。关键行需要加注释。
(因为一开始没想好实现的类,先用了数据流,发现只能写入基本数据类型,后面改用对象流,写了一部分写入文件的代码)
相关代码:

运行结果:(这是个乱码,大佬说是因为存入文件的是一个对象- - 其实我不太清楚这个)

3. 代码量统计
3.1 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
| 周数 | 行数 | 新增行数 | 文件数 | 新增文件数 |
|---|---|---|---|---|
| 1 | 57 | 57 | 5027 | 5027 |
| 2 | 400 | 400 | 10 | 10 |
| 3 | 508 | 508 | 23 | 13 |
| 5 | 609 | 609 | 31 | 8 |
| 6 | 612 | 612 | 40 | 9 |
| 7 | 584 | 584 | 46 | 6 |
| 8 | 432 | 432 | 50 | 4 |
| 9 | 620 | 620 | 56 | 6 |
| 10 | 468 | 468 | 60 | 4 |
| 11 | 476 | 476 | 67 | 7 |
| 12 | 593 | 593 | 74 | 7 |
| 13 | 646 | 646 | 82 | 8 |
4.选做:流与文件学习指导(底下的作业内容全部都是选做)
4.1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读)
将Student对象(属性:int id, String name,int age,double grade)写入文件student.data、从文件读出显示。
4.1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔。使用Scanner或者BufferedReader将student.txt的数据读出。(截图关键代码,出现学号)
关键代码:
运行截图:
4.1.2 生成文件大小多少(使用右键文件属性查看)?分析该文件大小。
文件大小:
分析:
按照 每个中文字符两个字节,每个英文字符以及”|”一个字节,换行符两个字节 计算:
第一、二、三行:16*3=48字节
第四行:16+2-1=17字节(多了一个中文2字节,最后一个数据少了一个数字1字节)
计算文件大小:48+17=65字节
4.1.3 如果调用PrintWriter的println方法,但在后面不close。文件大小是多少?为什么?
文件大小:
原因:由于PrintWriter内部使用了缓冲区,则根据缓冲区原理,当缓冲区满时才真正进行底层操作。如果调用PrintWriter的println方法,但在后面不close,则最后的字节可能并不会被传送出去,可能会造成数据的丢失。
4.2. 缓冲流
4.2.1 使用PrintWriter往文件里写入1千万行(随便什么内容都行),然后对比使用BufferedReader与使用Scanner从该文件中读取数据的速度(只读取,不输出),使用哪种方法快?截取测试源代码,出现学号。请详细分析原因?提示:可以使用junit4对比运行时间
测试代码:
运行结果:
使用BufferedReader方法快
原因:BufferedReader是字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取,而且也可以设置缓冲区的大小,由于BufferedReader的缓冲区比Scanner的更大,在使用时减少读取文本的操作次数,所以速度更快。
4.2.2 将PrintWriter换成BufferedWriter,观察写入文件的速度是否有提升。记录两者的运行时间。试分析原因。
关键代码:
运行截图:
原因分析:BufferedWriter比PrintWriter快。
PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。虽然PrintWriter内部也使用缓冲区,但是BufferedWriter可以任意设定缓冲区大小,写入文件的速度更快。
4.3. 字符编码
4.3.1 现有EncodeTest.txt 文件,包含一些中文,该文件使用UTF-8编码。使用FileReader与BufferedReader将EncodeTest.txt的文本读入并输出。是否有乱码?为什么会有乱码?如何解决?(截图关键代码,出现学号)
其实一开始我的并没有乱码- - 百度说是window默认下是用GBK编码的,所以我先给它调成了UTF8编码。。
运行结果:
原因:有乱码是因为FileReader只能按系统默认的字符集(如GBK)来解码,但是自己新建的文件是按照UTF-8进行编码,因此将UTF-8编码的字符使用GBK编码来解析,就会出现乱码。
解决:手动设置了一下eclipse上的编码方式。。。。具体代码方法见下图:
4.3.2 编写方法convertGBK2UTF8(String src, String dst),可以将以GBK编码的源文件src转换成以UTF8编码的目的文件dst。
编写方法:
运行结果:
201621123062《java程序设计》第12周作业总结的更多相关文章
- 201621123062《java程序设计》第九周作业总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 思维导图1:(对集合部分做了一些改动和细化) 思维导图2:(泛型) 1.2 选做:收集你认为有用的代码片段 代 ...
- 201771010141 周强 面向对象程序设计(Java)第12周作业
实验十二 图形程序设计 实验时间 2018-11-14 1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌握Java GUI中2D图形绘制常用类的AP ...
- 201521123027<java程序设计>第14周作业总结
1.本周作业总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2.书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己 ...
- 2018面向对象程序设计(Java)第12周学习指导及要求
2018面向对象程序设计(Java)第12周学习指导及要求 (2018.11.15-2018.11.18) 学习目标 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌 ...
- 面向对象程序设计(JAVA) 第12周学习指导及要求
2019面向对象程序设计(Java)第12周学习指导及要求 (2019.11.15-2019.11.18) 学习目标 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API ...
- 20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第一周学习总结 教材学习内容总结 -第一章Java入门要点: -Java的地位:具有面向对象,与平台无关,安全稳定和多线 ...
- 20175314 《Java程序设计》第一周学习总结
20175314 <Java程序设计>第一周学习总结 教材学习内容总结 除了学院统一购买的<Java 2 实用教程(第5版)>我还在网上买了一本<Head ...
- 20165225 《Java程序设计》第二周学习总结
20165225<Java程序设计>第二周学习总结 1.视频与课本中的学习: ##### 1.标识符: 字母.下划线.美元符号.数字(不能是true,false,null还有关键字). # ...
- 20172306 《Java程序设计》第二周学习总结
20172306<Java程序设计>第二周学习总结 教材学习内容总结 这一周的学习,我觉得我比上一周认真多了,而且我突然发现慢慢学习的过程中,以前有一些多余自己打出来的东西,有了更清晰的认 ...
- 20155312 2016-2017-2 《Java程序设计》第九周学习总结
20155312 2016-2017-2 <Java程序设计>第九周学习总结 课堂内容总结 两个类有公用的东西放在父类里. 面向对象的三要素 封装 继承 多态:用父类声明引用,子类生成对象 ...
随机推荐
- 谈谈在.NET Core中使用Redis和Memcached的序列化问题
前言 在使用分布式缓存的时候,都不可避免的要做这样一步操作,将数据序列化后再存储到缓存中去. 序列化这一操作,或许是显式的,或许是隐式的,这个取决于使用的package是否有帮我们做这样一件事. 本文 ...
- [HNOI2014]米特运输
显然知道一个节点就可以推出整棵树 然而直接乘会爆longlong 所以考虑取log 最后排序算众数即可 # include <stdio.h> # include <stdlib.h ...
- Vue的组件为什么要export default
Vue 的模块机制 Vue 是通过 webpack 实现的模块化,因此可以使用 import 来引入模块,例如: 此外,你还可以在bulid/webpack.base.conf.js文件中修改相关配置 ...
- python 想搞加密算法吗?快戳这里
加密算法介绍 一,HASH Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换 ...
- 百度在线编辑器 - PHP获取提交的数据
原文:http://www.upwqy.com/details/14.html 1 我们知道在在百度在线编辑器的demo中. 我们只要在body 里面 加载 script 标签 id="ed ...
- Oracle GoldenGate实现数据库同步
前言:最近刚好在弄数据库同步,网上查了些资料再加上自己整理了一些,做个分享! 一.GoldenGate的安装 1.安装包准备 数据库版本:Oracle Database 11g Release 2(1 ...
- WordPress设置圆形旋转头像的方法
很多网站的评论者的头像都是圆形的,并且当你的鼠标移上去的时候会旋转,那么这个怎么实现呢,我在网上找了很多,但是和我的主题都不适用,现在把我修改后的代码贴出来,只要将下面的代码添加到style.css中 ...
- 【Unity与23种设计模式】解释器模式(Interpreter)
GoF中定义: "定义一个程序设计语言所需要的语句,并提供解释来解析(执行)该语言." 传统上,执行程序代码通常通过两种方式 第一种:编译程序 第二种:解释器 常见的使用解释器的程 ...
- Unity3d底层数据传递分析
WeTest 导读 这篇文章主要分析了在Mono框架下,非托管堆.运行时.托管堆如何关联,以及通过哪些方式调用.内存方面,介绍了什么是封送,以及类和结构体的关系和区别. 一.托管交互(Interop) ...
- R语言-用户细分
案例:通过使用R语言的聚类算法将用户进行合理的划分,找出对超市贡献度,光临度最高的优质客户,对后期的推广有更深远的影响 1.导入包 library(dplyr) library(reshape2) l ...
















