序列化流, 打印流 , 网络三要素

序列化流

Java提供了一种对象序列化的机制, 用一个直接序列可以表示一个对象, 该字节序列包含该对象的数据, 对象的类型和对象中存储的属性等信息. 字节序列写入到文件中后,就相当于在文件中保存了一个对象信息 . 

反之 , 该字节序列还可以从文件中读取出来,重构对象, 对它进行反序列化 . 对象的数据, 对象的类型和对象中存储的数据信息,都可以用来在内存中创建对象.

ObjectOutputStream类

java.io.ObjectOutputStream类,将Java对象的元素数据类型写入到文件中,实现对象的持久化存储.

构造方法

  • public ObjectOutputStream(OutputStream out) : 创建一个指定的OutputStream的ObjectOutputStream类对象

特有的独有方法:

  • void writeObject(Object obj): 将指定的对象写入到ObjectOutputStream类对象中.

序列化操作

  1. 一个对象要想能够序列化和反序列化,必须满足两个条件:

  • 该类必须实现java.io.Sreializable接口,Sreializable接口是一个标记型接口,如果该类没有实现    Sreializable接口,将会抛出NotSerializableException。
  • 该类的所有属性必须是可以实现序列化或者反序列化. 如果有一个属性不想让他参与序列化,则改属性必须标明是瞬态的,瞬时的,这个关键字是transient.

ObjectInputStream类

java.io.ObjectInputStream类是反序列化流,将之前使用ObjectOutputStream序列化流的原始数据恢复为对象.

构造方法

  • public ObjectInputStream(InputStream in) : 创建一个指定的InputStream的对象反序列化流对象.

特有的方法:

  • public final Object readObject(): 从反序列化流中读取一个对象.

对于JVM来说,能够进行反序列的现象,前提条件是必须能够找到class文件的类,如果找不到该类的class文件,则会抛出一个ClassNotFoundException异常

另外,当JVM序列化对象时, 能够找到class文件,但是class文件在序列化对象时,发生了修改,那么反序列化操作会抛出一个IncalidClassException异常.原因如下:

  • 该类的序列化版本号从流中读取出来描述该类的版本号不一致.
  • 该类包含了未知数据类型.
  • 该类没有可访问的无参构造方法.

Serializable接口给需要序列化的类,提供了一个序列化版本号,serialVersionUID 该版本号的目的就是在于验证序列化的对象和对应的类是否是版本一致的.

打印流

java.io.PrintStream类能够很方便打印各种数据类型的值.

构造方法

  • public PrintStream(String filename): 使用指定的文件名创建一个新的打印流对象.

改变打印流的方向

正常System.out就是PrintStrean类型的,数据的流动的位置在控制台中,改变数据的流动位置.通过System.setOut(PrintStream print)来改变流向

网络编程基础

软甲架构:

  • C/S架构: 即Client/Server(客户端/服务器端)架构 , 如: QQ,迅雷
  • B/S架构: 即Browser/Server(浏览器端/服务器端) 架构,简化了系统的开发,维护和使用. 如: 谷歌,火狐

B/S架构与C/S架构的区别:

  • C/S架构基于局域网的,而B/S架构基于广域网的基础上.
  • 硬件环境不同,C/S建立在专用网络上, 小范围的网络,可以专门为服务器提供数据连接和数据交换
  • C/S一般面向的固定用户群体,对信息的安全控制较高一点.
  • 对程序架构不同
  • 用户接口不同: C/S架构大多建立在Windows平台上,B/S建立在浏览器上,不仅可以应用在Windows平台上,也可应用在Unix/Linux等平台上.

两种架构各有优势,但是无论使用哪种架构,都离不开网络的支持.网络编程,就是在一定的协议下,实现两台计算机的通信的程序.

网络通信协议

  • 网络通信协议: 通信协议是计算机通信必须遵从的一种规则,协议中对数据的传输格式,传输的速率,传输的步骤等都做了同意的规定,通信双方必须同时遵守,最终实现数据的正常传输和交换.
  • TCP/IP: 传输控制协议(TCP)/因特网互联协议(IP),他俩定义了计算机如何联网,数据如何交换和传输的标准,它的内部包含了一系列用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫下一层所提供的协议来完成自己的请求.

协议分类

  • TCP协议:传输控制协议,该协议是面向连接的通信协议,即数据传输前,在发送端和接收端先建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠的无差错的数据传输.
  • 三次握手:在数据发送的准备阶段,客户端和服务器之间通过三次交互,保证连接的可靠性。

    三次握手:

通过三次握手,建立连接后,客户端和服务器端就可以进行数据传输了。由于这种面相连接的特性,TCP协议能够数据传输的安全。所以应用挺广泛的,下载文件等。

  • UDP:用户数据报协议(User DataProgram Protocal),他是一个面相无连接的协议。在进行数据传输时,不需要建立连接。不管对方在不在,直接将数据、数据源和目的地封装到数据包中,发送过去。每次发送的数据不能很大,限制在64K以内,数据有可能丢失,数据传输时不安全,速度快,QQ聊天

网络编程三要素【了解】

  • 协议:计算机通信必须遵守的规则。

  • IP地址:互联网协议地址,俗称IP,IP地址用来给网络中的计算机编订一个唯一的编号。

  • 端口号:端口号就是唯一标识设备中的进程(应用程序)。IP地址是唯一标识网络中的设备。

 

上一篇:Error: cannot convert ‘USBSerial*‘ to ‘HardwareSerial*‘ in assignment


下一篇:什么是java序列化,如何实现java序列化?