java面试第十四天
包名、类名和属性可以被序列化,方法和构造器不会被序列化的。
静态属性不会被序列化的。
属性会被递归序列化的,也就是一个类中有引用类型的属性,如果这个属性对应的类实现了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面试第十四天的更多相关文章
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
- “全栈2019”Java多线程第二十四章:等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 《Java程序设计》十四次作业
<Java程序设计>十四次作业实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 3. 代码量统计 周次 总代码量 新增代码量 总文件数 新增 ...
- “全栈2019”Java多线程第十四章:线程与堆栈详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第十四章:将异常输出到文本文件中
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java第八十四章:接口中嵌套接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第七十四章:内部类与静态内部类相互嵌套
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第六十四章:接口与静态方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十四章:多态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- flash从数据流判断图片格式防止xss攻击
前段时间测试人员报了一个flash的xss bug,经分析用了Loader.loadBytes且没做数据流格式校验的程序都会中招,自测方法只需一行代码: ExternalInterface.call( ...
- hdu3790最短路径问题(BFS+优先队列)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- oracle的dump理解
http://blog.csdn.net/notbaron/article/details/51228444 http://blog.csdn.net/lqx0405/article/details/ ...
- systemtap 用户态调试2
[root@localhost ~]# cat user.stpprobe process(@1).function(@2){print_ubacktrace();exit();} session 1 ...
- Testing your Xamarin app on Android device
I've develop a test application in Xamarin Studio (Android with C#) and wanted to test it on my phon ...
- CNZZ站点流量统计原理简析
这是我的域名www.iyizhan.com.暂无内容,当中仅仅有一个页面index.html. 在index.html上放置了例如以下的 js 脚本: <script src="ht ...
- jQuery插件——可以动态改动颜色的jQueryColor
1.请选择代码框中所有代码后, 保存为 jquery.color.js /*! * jQuery Color Animations v@VERSION * https://github.com/jqu ...
- 跟我学Spring3(9.1):Spring的事务之数据库事务概述
原文出处: 张开涛 9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致 ...
- 第九章 JVM调优推荐
说明:本文主要参考自<分布式Java应用:基础与实践> 1.JVM的调优主要是内存的调优,主要调两个方面: 各个代的大小 垃圾收集器选择 2.各个代的大小 常用的调节参数 -Xmx -Xm ...
- ubuntu14.04上编译安装python3.7.3
首先先去python官网www.python.org下载python3.7.3的官方压缩包Python-3.7.3.tgz 一.先安装需要的包zlib1g,libffi apt-get update ...