序列化流、网络编程

序列化流

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

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

ObjectOutputStream类

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

构造方法
  • public ObjectOutputStream(OutputStream out):创建一个指定的OutputStream的ObjectOutputStream类对象
特有的独有方法:
  • void writeObject(Object obj):将指定的对象写入到ObjectOutputStream类对象中。
序列化操作
  1. ​ 一个对象想要能够序列化和反序列化,必须满足两个条件:
    • 该类必须实现java.io.Serializable接口,Serializable接口,是一个标记型接口,如果该类没有实现Serializable接口,将会抛出NotSerializableException。
    • 该类的所有属性必须是可以实现序列化或者反序列化。如果有一个属性不想让它参与序列化,则该属性必须标明是瞬态的,瞬时的,这个关键字是transient
public class Student implements Serializable {

    private String name;
    private transient Integer age;// 不让age属性参与序列化
    
}    
ObjectInputStream类

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

构造方法
  • ​ public ObjectInputStream(InputStream in):创建一个指定的InputStream的对象反序列化流对象。
特有的方法:
  • ​ public final Object readObject():从反序列化流中读取一个对象。

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

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

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

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

代码演示:

// 序列化操作类
public class Demo01ObjectOutputStream {
    public static void main(String[] args) throws IOException {
        //1.创建ObjectOutputStream流对象,构造方法中传递指定的字节输出流。
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day30_IO\\student.txt"));
        //2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中。
        //2.1 先创建一个对象
        Student s = new Student("小孙", 30);
        s.score = 60;
        //2.2写对象到文件中
        oos.writeObject(s);
        //3.释放资源。
        oos.close();
    }
}
// 反序列化类操作
public class Demo02ObjectInputStream {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 1. 创建一个ObjectInputStream流对象,构造方法中传递一个字节输入流对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day30_IO\\student.txt"));
        // 2. 使用ObjectInputStream流对象中的方法readObject,读取保存在文件中的对象数据
        Object obj = ois.readObject();
        // 3.释放资源。
        ois.close();
        // 4. 查看对象的数据
        System.out.println(obj);// Student{name='小孙', age=30}
        if ( obj instanceof Student) {
            Student student = (Student)obj;
            System.out.println(student.getAge() + "--" + student.getName());
        } else {
            System.out.println("转换失败");
        }
    }
}
// 需要被序列化的类
import java.io.Serializable;
public class Student implements Serializable {
    // 可以选择手动自定义一个序列化版本号
    private static final long serialVersionUID = 1L;
    //private static String name;
    private String name;
    private Integer age;
    private transient String address = "郑州市";
    transient int score;// 0
}
打印流

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

构造方法
  • public PrintStream(String filename):使用指定的文件名创建一个新的打印流对象。
改变打印流的方向

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

 PrintStream out = System.out;
 out.print(123);// 在控制台中
 // 构造方法创建一个打印流对象
 PrintStream printStream = new PrintStream("day30_IO\\print.txt");
 // 改变打印流的方向为"day30_IO\\print.txt"路径
 System.setOut(printStream);
 System.out.println("我已经改变了输出数据的位置");
 System.out.println("我想在控制台中输出数据");
 System.out.println("啦啦啦啦啦"); 
网络编程基础
软件架构:
  • 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地址是唯一标识网络中的设备。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值