20145334赵文豪 《Java程序设计》第6周学习总结

教材学习内容总结

第十章 输入/输出

数据流

I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出。

Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取出,可以使用输入传流,如果要将数据写入目的地,可以使用输出串流。

在java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutStream实例。

InputStream与OutputStream

InputStream不关心数据源来自何种设备(键盘,文件,网络);

OutputStream不关心数据的目的是何种设备(键盘,文件,网络)

提供串流基本操作,如果想要为输入/输出的数据做加工处理,则可以使用打包器类。

子类一: FileInputStream,FileOutputStream。适用于文件的创建和读写。这两个子类在不使用时都要用close()关闭文档。

子类二:ByteArryInputStream,ByteArryOutputStream。指定byte数组创建实例,一旦创建就可将byte数组当做数据源进行读写。

Reader与Writer

字符数据的读取:java.io.Reader类,其抽象化了字符数据读入的来源;字符数据的写入:java.io.Writer类。其抽象化了数据写出的目的地。

第十一章 线程与并行API线程

线程

单线程:

启动的程序从main()程序进入点开始至结束只有一个流程。

多线程:要设计程序可以拥有多个程序。即在main以外独立设计流程。

实现多线程

撰写类操作**java.lang.Runnable接口。操作进入点:run();

创建Thread实例来执行Runnable实例定义的run()方法,启动线程执行指定的线程,调用Thread实例的start()方法。

继承Thread类。

并行API

使用Thread建立多线程程序,必须亲自处理synchornized、对象锁定、wait()、notify()、notifyAll()等细节,如果需要的是线程池、读写解锁高等级操作,从JDK5之后提供了java.util.concurrent,可基于其中的API建立更稳固的并行应用程序。

并行API可以分为以下几个类.

1.Lock、ReadWriter与Condition

2.使用Executor

3.并行Collection

Lock、ReadWriteLock

lock接口主要操作类之一为ReentrantLock,可以达到synchronized的作用。

ReadWriteLock接口定义了读取锁定与写入锁定行为,可以使用readLock()、writeLock()方法返回Lock操作对象。

StampedLock类可支持了乐观读取操作。也就是若读取线程很多,写入线程很少的情况下,你可以乐观地认为,写入与读取同时发生的机会很少,因此不悲观的使用哇暖的读取锁定,程序可以查看数据读取之后,是否遭到写入线程的变更,再采取后续的措施。

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

DataInputStream与DataOutputStrea用来装饰InputStream、OutputStream、DataInputStream、DataOutputStream 提供读取、写入 java 基本数据类型的方法,像是s读写int double boolean 等的方法。这些方法会自动在指定的类型与字节间转换。

代码如下:

  1. package cc.openhome;
  2. import java.io.*;
  3. public class Member {
  4. private String number;
  5. private String name;
  6. private int age;
  7. public Member(String number, String name, int age) {
  8. this.number = number;
  9. this.name = name;
  10. this.age = age;
  11. }
  12. public String getNumber() {
  13. return number;
  14. }
  15. public void setNumber(String number) {
  16. this.number = number;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public int getAge() {
  25. return age;
  26. }
  27. public void setAge(int age) {
  28. this.age = age;
  29. }
  30. @Override
  31. public String toString() {
  32. return String.format("(%s, %s, %d)", number, name, age);
  33. }
  34. public void save() throws IOException {
  35. try(DataOutputStream output =
  36. new DataOutputStream(new FileOutputStream(number))) {
  37. output.writeUTF(number);
  38. output.writeUTF(name);
  39. output.writeInt(age);
  40. }
  41. }
  42. public static Member load(String number) throws IOException {
  43. Member member;
  44. try(DataInputStream input =
  45. new DataInputStream(new FileInputStream(number))) {
  46. member = new Member(
  47. input.readUTF(), input.readUTF(), input.readInt());
  48. }
  49. return member;
  50. }
  51. }

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

ObjectInputStream 提供 readObject() 方法将数据读入为对象,ObjectOutputStream 提供 writeObject() 方法将对象写至目的地。

代码如下:

  1. package cc.openhome;
  2. import java.io.*;
  3. public class Member2 implements Serializable {
  4. private String number;
  5. private String name;
  6. private int age;
  7. public Member2(String number, String name, int age) {
  8. this.number = number;
  9. this.name = name;
  10. this.age = age;
  11. }
  12. public String getNumber() {
  13. return number;
  14. }
  15. public void setNumber(String number) {
  16. this.number = number;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public int getAge() {
  25. return age;
  26. }
  27. public void setAge(int age) {
  28. this.age = age;
  29. }
  30. @Override
  31. public String toString() {
  32. return String.format("(%s, %s, %d)", number, name, age);
  33. }
  34. public void save() throws IOException {
  35. try(ObjectOutputStream output =
  36. new ObjectOutputStream(new FileOutputStream(number))) {
  37. output.writeObject(this);
  38. }
  39. }
  40. public static Member2 load(String number)
  41. throws IOException, ClassNotFoundException {
  42. Member2 member;
  43. try(ObjectInputStream input =
  44. new ObjectInputStream(new FileInputStream(number))) {
  45. member = (Member2) input.readObject();
  46. }
  47. return member;
  48. }
  49. }

本周代码托管截图

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

本周只是粗略的看了看书,照着课本敲了几段代码,上传到了上面,我会在后面的学习中努力跟上大家的步伐,娄老师辛苦了

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 20篇 300小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/600 1/2 22/60
第四周 300/700 1/2 30/50

第五周 100/800 1/3 2/60

参考资料

# 20145334赵文豪 《Java程序设计》第6周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. 求余VS求模--C语言中表述

    之前看帖子,发现许多时候基本上大家都把求模和求余混为一谈了.但实际上二者的概念是有区别的   1. 求余 在C语言中,求余对应的操作符是%,且a%b求余的最后结果总是与a符号相同,最后的数值为|a|% ...

  2. ios透明代理抓包

    之前接到一些ios测试的时候,一些应用往往由于这样那样的原因(比如自实现的发包函数)导致直接使用本地ios系统的代理很难将数据代理到主机的burp或findler中,本文提供了一种解决该问题的途径 原 ...

  3. 车销送货上门专用无线开单器-自带PDA无线移动开单系统 与云服务器连接

    浩瀚技术配套PDA终端软件 本软件与 数据采集器搭配销售,PDA端软件不单独销售也不含电脑端管理软件 数据采集器 一维扫描头+WIFI+蓝牙+一体打印+PDA软件.  产品特点: 1:通过操作移动手持 ...

  4. mongodb 连接和操作

    使用方法: 1.安装mongodb 2.配置环境变量 mac下: export PATH=/Users/sunbey/Documents/learn/mongodb/mongodb-osx-x86_6 ...

  5. hdu 1114 Piggy-Bank

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  6. hdu 2102 A计划-bfs

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  7. Codeforces 581F Zublicanes and Mumocrates(树形DP)

    题目大概说有一棵树要给结点染色0或1,要求所有度为1的结点一半是0一半是1,然后问怎么染色,使两端点颜色不一样的边最少. dp[0/1][u][x]表示以u结点为根的子树中u结点是0/1色 且其子树有 ...

  8. 由case 和 break 引发的思考

    我在使用case 语句的时候,发现结果不对劲,原来我是忽略了break这个语句的添加 然后,我要反思的是,这样基本的语句,我这样的错误也能犯,证明我自己之前还没有真正掌握这个语句的使用. 所以,真正地 ...

  9. 来抢你们IT狗的饭碗了

    Java,Html,Css,JavaScript,Jsp啥都不会啊 ,等着我!

  10. BZOJ3868 : The only survival

    枚举每个点到$1$的距离,若$>k$则视为$k+1$,那么$d_1=1,d_n=k$. 对于$i$,如果$1\leq d_i\leq k$,则一定要存在一条边长度为$d_i-d_j$,且其他边长 ...