您的位置:首页 > 编程语言 > Java开发

20155222 2016-2017-2 《Java程序设计》第8周学习总结

2017-04-16 21:39 369 查看

20155222 2016-2017-2 《Java程序设计》第8周学习总结

教材学习内容总结

Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。

Java NIO: Channels and Buffers(通道和缓冲区)

标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

JDK 1.4中引入的日志API,能够捕获很多错误信息,比如:设置错误、性能瓶颈、安全破坏、程序或平台小问题等。这些API提供的日志非常适用于各种不同使用者的分析,包括:外出服务工程师,软件开发人员,参与客户管理和维护的系统管理员。

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

IO与NIO有何区别?

面向流与面向缓冲

Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

阻塞与非阻塞IO

Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

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

-如何使用NIO读取数据。

import java.io.*;
import java.nio.*;
import java.nio.channels.*;

public class Program {
static public void main( String args[] ) throws Exception {
FileInputStream fin = new FileInputStream("c:\\test.txt");

// 获取通道
FileChannel fc = fin.getChannel();

// 创建缓冲区
ByteBuffer buffer = ByteBuffer.allocate(1024);

// 读取数据到缓冲区
fc.read(buffer);

buffer.flip();

while (buffer.remaining()>0) {
byte b = buffer.get();
System.out.print(((char)b));
}

fin.close();
}
}

代码托管



上周考试错题总结

下面哪些Linux 命令可以ASCII码和16进制单字节方法输出Hello.java的内容?

od -tcx1 Hello.java

od -tc -tx1 Hello.java

JDK8中定义的通用函数接口,从行为上分为()类型:

Consumer

Function

Predicate

Supplier

When applied to instance variables, the ________________ visibility modifier enforces encapsulation(当应用到实例变量时,____可见性修饰符强制执行封装).:

private

__________________ parameters are the values that are used when calling a method(___参数是调用方法时传给方法的值).:

actual(实际参数)

What is the output of the following code?(下面代码的运行结果是?)

LocalDate date = LocalDate.of(2018, Month.APRIL, 40);

System.out.println(date.getYear() + " " + date.getMonth()+ " "+ date.getDayOfMonth());

A runtime exception is thrown.

What is the output of the following code?(下面代码的运行结果是?)

LocalDate date = LocalDate.of(2018, Month.APRIL, 30);

date.plusDays(2);

date.plusYears(3);

System.out.println(date.getYear() + " "+ date.getMonth() + " "+ date.getDayOfMonth());

2018 APRIL 30

Given the following, which answers can correctly fill in the blank? (Choose all that apply.)针对下面的代码,()中应填入哪个选项?

LocalDate date = LocalDate.now();

LocalTime time = LocalTime.now();

LocalDateTime dateTime = LocalDateTime.now();

ZoneId zoneId = ZoneId.systemDefault();

ZonedDateTime zonedDateTime = ZonedDateTime.of(dateTime, zoneId);

long epochSeconds = 0;

Instant instant = ( );

zonedDateTime.toInstant()

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周9/93/610/10
第二周40/491/75/15
第三周49/991/810/25
第四周202/3011/915/40
第五周170/4711/105/45
第六周115/5201/115/50
第七周18/5381/125/55
第八周28/5451/135/60
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

计划学习时间:20小时

实际学习时间:5小时

改进情况:

有空多看看现代软件工程 课件 软件工程师能力自我评价表

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导

...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: