包名、类名和属性可以被序列化,方法和构造器不会被序列化的。

静态属性不会被序列化的。

属性会被递归序列化的,也就是一个类中有引用类型的属性,如果这个属性对应的类实现了Serializable接口,在对象序列化时,也同样会对这个类中的属性进行对象序列化,如果没有实现Serializable接口,则会抛出异常。

所有属性必须都是可序列化的,特别是当有些属性本身也是对象的时候,要尤其注意这一点。

网络中传递对象必须实现序列化。

nio无阻塞的I/O(优化的I/O)

java.nio   定义块

Buffer类:一种用于特定的基本类型数据的容器

缓冲:就是块,用来存储内容。

容量:内存开辟的大小,根据类型的不同,有不同的空间。

界限:可用部分,即不应读取或写入的第一个元素的索引。

位置:当前指针的位置,从0开始。

容量>=界限>=位置

相关方法:

int capacity()

返回此缓冲区的容量。

int limit()

返回此缓冲区的界限。

int position()

返回此缓冲区的位置。

Buffer flip()

相当于截断没有用的空间,然后把指针移向开头,使limit=position,position=0

Buffer position(int newPosition)

设置此缓冲区的位置。

当有大的文件需要处理的时候,为了不影响性能建议用直接缓冲。

Buffer有直接缓冲和间接缓冲两种。

只有ByteBuffer类提供了直接缓冲。使用直接缓冲,不影响程序。其它类想用直接缓冲需要进行转换。

java.nio.channels    对块进行读写的通道,类似于以前的流

Channel接口:用于 I/O 操作的连接

编程步骤:

a. 先创建一个I/O流,

b. 使用I/O流.getChannel()方法,获得通道,

c. 创建大小合适的ByteBUffer,

d. 通道的对象.read(buffer)/write(buffer)进行读写,

e. 关闭所有的流和通道,

f. 如果有多线程并发,可以使用"通道.lock()"获得FileLock对象,用FileLock.release() 释放此锁定。

g. 当遇到编码问题,使用CharSet、CharsetDecoder、CharsetEncoder三个类去解决

注意:

在读之前需要调用一下clear()方法,帮助读操作清理缓冲;写之前需要调用flip()方法,帮助写操作清理缓冲。

java.nio.charset    字符集,进行编码解码

Charset类:编码类,编码的信息

forName(String charsetName)

生成一个CharSet实例。

decode(ByteBuffer bb)

将此 charset 中的字节解码成 Unicode 字符的便捷方法。

encode(CharBuffer cb)

将此 charset 中的 Unicode 字符编码成字节的便捷方法。

CharsetDecoder类:解码器

能够把特定 charset 中的字节序列转换成 16 位 Unicode 字符序列的引擎。

CharsetEncoder类:编码器,编码的行为

能够把 16 位 Unicode 字符序列转换成特定 charset 中字节序列的引擎。

网络编程:

网络基础知识

Mac地址:每个网卡专用地址,也是唯一的。

端口(port):应用程序(进程)的标识(网络通信程序)

OS中可以有65536(2^16)个端口,进程通过端口交换数据。

端口是一种抽象的软件结构,与协议相关:TCP的23端口和UDT的23端口为两个不同的概念。

端口应该用1024以上的端口,以下的端口都已经设定功能。

协议:为了进行网络中的数据交换而建立的约定,协议是为了保证通信的安全,不同层的协议是完全不同的。

TCP协议:传输层的协议,重发一切错误的信息

IP协议:保证地址和主机一一对应(ip地址+网卡地址)

TCP编程:

TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

1) 服务器分配一个端口号,服务器使用accept()方法等待客户端的信号,信号一到打开socket连接,从socket中取得OutputStream和InputStream。

2) 客户端提供主机地址和端口号使用socket端口建立连接,得到OutputStream和InputStream。

Server端编码的步骤:

1、new ServerSocket 打开端口

2、调ServerSocket的accept()等待客户连接,当连接成功返回交互的Socket。

3、调用Socket.getInputStream,getOutputStream获得服务器端的IO流

4、用处理流封装后与客户端交互,记住你读我写,一读一写。

5、关闭单一客户端调用Socket的close(),关闭服务器调ServerSocket的close();

Socket端编码步骤:

1、new Socket(Server ip,Server port)试图连接,如成功才有对象

2、调用Socket.getInputStream,getOutputStream获得服务器端的IO流

3、用处理流封装后与客户端交互,记住你读我写,一读一写。

4、关闭,只有Socket的close()方法。

java面试第十四天的更多相关文章

  1. Java进阶(三十四)Integer与int的种种比较你知道多少?

    Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...

  2. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. 《Java程序设计》十四次作业

    <Java程序设计>十四次作业实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 3. 代码量统计 周次 总代码量 新增代码量 总文件数 新增 ...

  4. “全栈2019”Java多线程第十四章:线程与堆栈详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  5. “全栈2019”Java异常第十四章:将异常输出到文本文件中

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  6. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第七十四章:内部类与静态内部类相互嵌套

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第六十四章:接口与静态方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第五十四章:多态详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. SqlServer收缩日志文件

    通过收缩的方法可以释放所占空间. 第一步:将数据库的模式调整为简单模式 右击数据库名->'属性'->'选项'->恢复模式改成'简单'->点'确定'按钮. 第二步:收缩文件 右键 ...

  2. lucene.net 3.0.3、结合盘古分词进行搜索的小例子(分页功能)

    转自:http://blog.csdn.net/pukuimin1226/article/details/17558247 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新 ...

  3. 深入浅出VC++串口编程之基于Win32 API

    1.API描述 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致. 打开串口 Win32 中用于打开串口的API 函数为CreateFile,其原型为: H ...

  4. 使用依赖关系注入在 ASP.NET Core 中编写干净代码

    ASP.NET Core 1.0 是 ASP.NET 的完全重新编写,这个新框架的主要目标之一就是更多的模块化设计.即,应用应该能够仅利用其所需的框架部分,方法是框架在它们请求时提供依赖关系.此外,使 ...

  5. RestClient POST

    SSL: ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyError ...

  6. 比起 JSON 更方便、更快速、更簡短的 Protobuf 格式

    Protocol Buffers 是由 Google 所推出的一格式(後台真硬),你可以把它想像成是 XML 或 JSON 格式,但是更小.更快,而且更簡潔.這能夠幫你節省網路與硬體資源,且你只需要定 ...

  7. 【BZOJ】【2626】JZPFAR

    KD-Tree 0.0找第k大…… 裸KD-Tree……跟之前那道找最近的k个点大同小异 一开始理解错:第K大是第K远……不是第K近……(Tunix你个sb 感觉容易出错的是0号点= =边界情况需要仔 ...

  8. 【UOJ Round #8】

    A 一道不错的题,虽然大家都觉得是水题,然而蒟蒻我想出来的好慢……Orz alpq 发现其实就是一个网格图,每一个大块都是同一颜色……横纵坐标互不干扰…… //UOJ Round #8 A #incl ...

  9. 泛泰A870(高通600 cpu 720p) 刷4.4专用中文recovery TWRP2.7.1.1版(三版通刷)

    欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...

  10. 把Scala代码当作脚本运行

    1. 在类UNIX系统上作为脚本运行 在类Unix系统上,你可以设置一个shell前导词来执行脚本.如下例: Script.scala #!/usr/bin/env scala !# println( ...