java第六周学习总结
学号20145336 《Java程序设计》第五周学习总结
教材学习内容总结
第十章 输入与输出
InputStream与OutputStream
-
java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象。从程序角度来看,如果将数据从来源中取出,可以使用输入串流,如果将数据写入目的地可以使用输出串流。在java中,输入串流对象为java.io.InputStream实例,输出串流对象为java.io.OutputStream实例。流(Stream)是对「输入输出」的抽象,注意「输入输出」是相对程序而言的。
-
read和write:每次从InputStream读入的数据,都会先植入byte数组中。InputSream的read()方法每次都会尝试读byte数组长度的数据,并返回实际读入的字节,只要不是-1,就代表读取到数据。剋使用OutputStream的write()方法,指定要写出的byte数组、出事索引与数据长度。
-
标准输入输出 :System.in和System.out分别代表标准输入和标准输出。可以使用System的setIn()方法指定InputStream实例,重新制定标准输入来源。标准输出可以重新导向至文档,只要执行程序是使用>将输出结果导向至指定的文档。若hello类执行了System.out.println("HelloWorld"):>java hello>Hello.txt System.in: 标准输入,默认关联到键盘(终端输入) System.out: 标准输出,默认关联到显示器(终端输出) System.err: 标准错误,默认关联到显示器(终端输出) 输入输出重定向:setIn,setOut,setErr
-
装饰器类:InputStream、OutStream提供串流基本操作,如果想要为输入/输出的数据做加工处理,则可以使用打包器类。常用的打包器具备缓冲区作用的BufferedOutputStream、BufferedInputStream,具备数据转换处理的DataInputStream、DataOutputStream,具备对象串行化能力的ObjectInputStream、ObjectOutputStream等。 (1)BufferedInputStream与BufferedOutputStream •BufferedInputStream与BufferedOutputStream主要在内部提供缓冲区功能,操作上与InputStream、OutputStream并没有太大区别。 (2)DataInputStream与DataOutputStream •DataInputStream、DataOutputStream用来装饰InputStream、OutputStream,DataInputStream、DataOutputStream,提供读取、写入Java基本数据类型的方法,像是读写int、double、boolean等的方法。(3)ObjectInputStream与ObjectOutputStream •ObjectInputStream提供readObject()方法将数据读入为对象,而ObjectOutputStream提供writeObject()方法将对象写至目的地。可以被这两个方法处理的对象,必须操作java.io.Serializable接口,这个接口并没有定义任何方法,只是作为标示之用,表示这个对象是可以串行化的。
第十一章 线程与并行API
-
线程:到目前为止介绍过的各种范例都是单线程程序,也就是启动的程序从main()程序进入点开始至结束只有一个流程。有时候还需要设计程序可以拥有多个程序,也就是所谓的多线程程序。 要让目前的流程暂停时间,可以使用java.lang.Thread的静态sleep()方法,指定的单位是毫秒,调用这个方法必须处理java.lang.InterruptedException。 如果想在main()之外独立设计流程,可以撰写java.lang.Runnable接口,流程的进入点是操作run()方法。从main()开始的流程会由主程序执行,可以创建Thread实例来执行Runnable实例定义的rin()方法,要启动线程执行指定的线程,必须调用Thread实例的start()方法。 如果主线程中启动了额外线程,默认会等待被启动的所有线程都执行完run()方法才终止JVM,如果一个Thread被标示为Daemon线程,在所有的非Daemon线程都结束时,JVM就会终止。 每个线程都属于某个线程群组,如果没有指定,则归入产生该子线程的线程群组,也可以自行指定线程群组,线程一旦归入某个群组,就无法再更换。ThreadGroup的某些方法,可以对群组中所有线程产生作用。如果想要一次取得群组中所有线程,可以使用enumerate()方法。activeCount()方法取得群组的线程数量。
-
并行API:使用Thread建立多线程程序,必须亲自处理synchornized、对象锁定、wait()、notify()、notifyAll()等细节,如果需要的是线程池、读写解锁高等级操作,从JDK5之后提供了java.util.concurrent,可基于其中的API建立更稳固的并行应用程序。并行API可以分为以下几个类:1.Lock、ReadWriter与Condition。2.使用Executor。3.并行Collection简介
代码调试中的问题和解决过程
本周代码托管截图:
学习进度条
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 150/150 | 1/1 | 15/15 | |
第二周 | 150/400 | 1/2 | 15/30 | |
第三周 | 150/550 | 1/3 | 20/50 | |
第四周 | 150/700 | 1/4 | 16/56 | |
第五周 | 150/850 | 1/5 | 19/65 | |
第六周 | 150/1000 | 2/7 | 23/88 |