当前位置: 首页 > news >正文

Java18:网络编程

一.对象序列化:

1.对象流:

ObjectInputStream 和 ObjectOutputStream

2.作用:

ObjectOutputSteam:内存中的对象-->存储中的文件,通过网络传输出去
ObjectInputStream:存储中的文件,通过网络传输出去-->内存中的对象

3.对象的序列化机制:

对象序列化机制允许把内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另外一个网络节点。//当其他程序获取了这种二进制流,就可以恢复成原来的java对象

4.序列化和反序列化过程:

代码实现:

public static void main(String[] args) throws IOException, ClassNotFoundException {//创建对象流ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("object.txt"));//字符串序列化oos.writeObject("北京欢迎你!");oos.flush();System.out.println("***************************************");//对象序列化Person p  = new Person("tom",20);oos.writeObject(p);oos.flush();oos.close();System.out.println("***************************************");//反序列化:把对象从文件或数据库中读取到内存中ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"));Object o = ois.readObject();System.out.println(o);Object o1 = ois.readObject();System.out.println(o1);ois.close();
}

5.实现序列化的对象所属的类需要满足:

1)需要实现接口:Serializable

2)当前类提供一个全局常量:SerialVersionUid

3)除了当前类需要实现Serializable接口之外,还需要保证其内部所有属性也必须是可序列化的

补充:ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量

二.随机存取文件流:

1.随机存取文件流:RandomAccessFile

2.使用说明:

1)RandomAccessFile直接继承于java.lang.Object类,实现了数据读取和输出

2)RandomAccessFile即可以是输入流又可以是输出流

3)RandomAccessFile作为输出流时,写出文件如果不存在,则在执行过程中自动创建,

如果写出的文件存在,则会对原文件内容进行覆盖

4)可以通过相关的操作,实现RandomAccessFile"插入"数据的效果。seek(int pos)

3.典型代码:

@Test
public void test() throws IOException {RandomAccessFile acf1 = new RandomAccessFile("cat.jpg", "r");RandomAccessFile acf2 = new RandomAccessFile("cat3.jpg", "rw");byte[] bute = new byte[1024];int len;while ((len = acf1.read(bute)) != -1) {acf2.write(bute, 0, len);}acf1.close();acf2.close();}@Test
public void test2() throws IOException {RandomAccessFile acf1 = new RandomAccessFile("hello1.txt", "rw");acf1.seek(3);acf1.write("xyz".getBytes());acf1.close();}@Test
public void test3() throws IOException {/*使用  RandomAccessFile 实现插入功能*/RandomAccessFile acf1 = new RandomAccessFile("h.txt", "rw");acf1.seek(3);StringBuilder sb  = new StringBuilder((int)new File("h.txt").length());//把剩余内容存到StringBuilder对象byte[] bute = new byte[1024];int len;while ((len = acf1.read(bute)) != -1) {sb.append(new String(bute,0,len));}//把指针从写指到3acf1.seek(3);acf1.write("xyz".getBytes());acf1.write(sb.toString().getBytes());acf1.close();}

三.网络传输:

1.实现网络通信需要解决的两个问题

1)如何准确地定位网络上一台或多台主机:定位主机上的特定应用

2)找到主机后如何可靠高效地进行数据传输

2.网络通信的两个要素:

1)对应问题一:ip和端口号

2)对应问题二:提供网络通信协议:TCP/IP参考模型(应用层,传输层,网络层,物理+数据链路层)

3.通信要素一:ip和端口号

1)ip的理解

》ip:唯一标识Internet上计算机(通信实体)

》在java 中使用InetAddress类代表ip

》ip分类:ipv4和ipv6 ;万维网和局域网

》域名:www.baidu.com  ,www.jd.com

2)InetAddress类:

2.1 实例化

getByName(String host),getLocalHost()

2.2 常用方法

getHostName() /getHostAddress()

3.端口号:正在计算机上运行的进程

要求:不同的进程不同的端口号

范围:被规定为一个正整数 0-65535

端口号与ip地址组合得出一个网络套接字:Socket

4.通信要素二:网络通信协议:

1)分类模型

2)TCP和UDP的区别

TCP协议:使用协议前建立TCP连接,形成传输通道,传输前使用三次握手方式,点对点通信,是可靠的;在连接中可进行大数据量的传输;传输完毕,需释放已建立的连接,效率低

UDP协议:将数据,源,目的封装成数据包,不需要建立连接,每个数据报的大小限制在64k内;

发送不管对方是否准备好,接收方收到也不确认,故是不可靠的;可以广播发送;发送数据结束时,无需释放资源,开销小,速度快

5.代码实例:

1)IP地址代码实例:

public class InetAddressTest {public static void main(String[] args) throws UnknownHostException {//根据ip地址创建ip地址对象InetAddress ina1 =InetAddress.getByName("192.168.1.1");System.out.println(ina1);//根据域名创建ip地址对象InetAddress ina2= InetAddress.getByName("www.baidu.com");System.out.println(ina2);byte[] address = ina1.getAddress();System.out.println(ina1.getHostName());System.out.println(ina1.getHostAddress());System.out.println(ina2.getHostName());System.out.println(ina2.getHostAddress());}
}

2)TCP代码实例:

public class Tcp1Test {
//发送信息@Testpublic void test() throws IOException {Socket  clent = new Socket(InetAddress.getByName("127.0.0.1"),8899);OutputStream outputStream = clent.getOutputStream();outputStream.write("我是客户端".getBytes());outputStream.close();clent.close();}@Testpublic void test2() throws IOException {ServerSocket  server  =new ServerSocket(8899);Socket accept = server.accept();InputStream inputStream = accept.getInputStream();ByteArrayOutputStream byteout =new ByteArrayOutputStream();byte[] buffer =new byte[20];int len;while((len=inputStream.read(buffer))!=-1){byteout.write(buffer,0,len);System.out.println(byteout.toString());}server.close();inputStream.close();byteout.close();}}
public class Tcp2Test {//发送文件@Testpublic void test1() throws IOException {InetAddress  inet= InetAddress.getByName("127.0.0.1");Socket clent =new Socket(inet,8851);OutputStream outputStream = clent.getOutputStream();FileInputStream fis= new FileInputStream("leaf.jpg");byte[] buffer= new byte[10];int len;while((len=fis.read(buffer))!=-1){outputStream.write(buffer,0,len);}fis.close();outputStream.close();clent.close();}@Testpublic  void  test2() throws IOException {ServerSocket server =new ServerSocket(8851);Socket accept = server.accept();InputStream inputStream = accept.getInputStream();FileOutputStream fos=new FileOutputStream("leaf2.jpg");byte[] bufferr = new byte[10];int len;while((len=inputStream.read(bufferr))!=-1){fos.write(bufferr,0,len);}fos.close();inputStream.close();server.close();}}
public class Tcp3Test {//发送文件,服务器返回信息@Testpublic void test() throws IOException {InetAddress   inet = InetAddress.getByName("127.0.0.1");Socket  client  =new Socket(inet,7788);OutputStream outputStream = client.getOutputStream();//从本地读取文件并发送到服务器FileInputStream fis =new FileInputStream("leaf.jpg");byte[] buffer =new byte[20];int len;while((len=fis.read(buffer))!=-1){outputStream.write(buffer,0,len);}//关闭数据输出client.shutdownOutput();//接受服务器发送的信息,并输出到控制台InputStream inputStream = client.getInputStream();ByteArrayOutputStream bos =new ByteArrayOutputStream();byte[] bu =new byte[20];int len1;while((len1=inputStream.read(bu))!=-1){bos.write(bu,0,len1);}System.out.println(bos.toString());fis.close();outputStream.close();client.close();}@Testpublic void test2() throws IOException {ServerSocket server = new ServerSocket(7788);Socket accept = server.accept();InputStream inputStream = accept.getInputStream();//接受客户端发送文件并存到本地FileOutputStream  fos= new FileOutputStream("leaf3.jpg");byte[] buff =new byte[20];int len;while((len=inputStream.read(buff))!=-1){fos.write(buff,0,len);}//给客户端发送已接收消息OutputStream outputStream = accept.getOutputStream();outputStream.write("图片已收到,谢谢".getBytes());fos.close();inputStream.close();server.close();outputStream.close();}}

3)UDP代码实例:

public class UdpTest {@Testpublic  void test() throws IOException {//发送端DatagramSocket socket =new DatagramSocket();InetAddress inet =InetAddress.getLocalHost();String str="我是udp方式发送的数据";byte[] buff = str.getBytes();DatagramPacket  packet =new DatagramPacket(buff,0,buff.length,inet,8890);socket.send(packet);socket.close();}@Testpublic void test2() throws IOException {//接收者DatagramSocket  socket =new DatagramSocket(8890);byte[] buffer =new byte[100];DatagramPacket packet =new DatagramPacket(buffer,0,buffer.length);socket.receive(packet);System.out.println(new String(packet.getData(),0,packet.getLength()));}
}

4)URL代码实例:

public class UrlTest {@Testpublic void test() throws MalformedURLException {//获取url对象URL url =new URL("http://localhost:8080/examples/leaf.jpg");//url 主要方法System.out.println(url.getProtocol());//获取协议System.out.println(url.getHost());//获取主机System.out.println(url.getPort());//获取端口System.out.println(url.getQuery());//获取查询内容}@Testpublic void test2() throws IOException {//服务器下载图片
URL url =new URL("http://localhost:8080/examples/leaf.jpg");HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.connect();InputStream inputStream = urlConnection.getInputStream();byte[] buffer =new byte[20];int len;FileOutputStream fos =new FileOutputStream("leafdown.jpg");while((len=inputStream.read(buffer))!=-1){fos.write(buffer,0,len);}inputStream.close();fos.close();urlConnection.disconnect();}
}

相关文章:

Java18:网络编程

一.对象序列化: 1.对象流: ObjectInputStream 和 ObjectOutputStream 2.作用: ObjectOutputSteam:内存中的对象-->存储中的文件,通过网络传输出去 ObjectInputStream:存储中的文件,通过网络传输出去…...

【Python百宝箱】模拟未见之境:精准工具畅游分子动力学风景

分子演绎:模拟工具的综合探索 前言 在当今科学研究中,分子动力学模拟成为解析原子和分子行为的关键工具之一。本文将深入探讨几种领先的分子动力学模拟工具,包括MDTraj、ASE(原子模拟环境)、OpenMM和CHARMM。这些工具…...

Vue 3面试题

Vue 3面试题 以下是一些常见的Vue 3面试题: Vue 3中的Composition API是什么?它与Options API有什么区别? 答案: Composition API是Vue 3中引入的一种新的组件设计模式,它允许开发者通过函数的形式组织和重用组件的逻…...

M-A352AD10高精度三轴加速度计

一般描述 M-A352是一种三轴数字输出加速度计,具有超低噪声、高稳定性、低功耗等特点,采用了夸特的精细处理技术。. 多功能M-A352具有高精度和耐久性,非常适合广泛的具有挑战性的应用,如SHM、地震观测、工业设备的状态监测和工业…...

(1)(1.13) SiK无线电高级配置(七)

文章目录 前言 17 技术细节 18 名词解释 前言 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向"高级用户"和希望更好地了解无线电如何运行的用户。 17 技术细节 在评估该无线电是否符合当地法规时,了解其使用的技术可能会有所帮…...

如何注释 PDF?注释PDF文件方法详情介绍

大多数使用 PDF 文档的用户都熟悉处理这种格式的文件时出现的困难。有些人仍然认为注释 PDF 的唯一方法是打印文档,使用笔或荧光笔然后扫描回来。 您可能需要向 PDF 添加注释、添加注释、覆盖一些文本或几何对象。经理、部门负责人在编辑公司内的合同、订单、发票或…...

GEE APP——基于PFI纯净森林指数的CCDC-SMA算法的长时序森林监测APP

简介 森林生态系统的碳排放受到破碎化加速和边缘效应的极大影响。要了解这些影响,就必须准确监测破碎化森林景观的变化。然而,这些变化通常强度低、尺度小,因此很难使用中等空间分辨率的卫星图像(如 Landsat)来检测。为了应对这一挑战,本研究开发了纯林指数(PFI),该指…...

CF1446B Catching Cheaters 题解 DP

Catching Cheaters 传送门 题面翻译 给我们两个字符串,让我们从中选出两个字串,算出它们的最大公共子序列长度。然后将它乘 4 4 4在减去两个字串的长度。问你这个数最大是多少。 题目描述 You are given two strings A A A and B B B representin…...

用python实现文本/图片生成视频

使用Python来生成视频通常涉及到使用一些专门的库,比如 OpenCV 或者 moviepy。下面是一个简单的例子,使用OpenCV和PIL(Python Imaging Library)来创建一个视频。 python复制代码 import cv2 import numpy as np from PIL import …...

Android Gradle Plugin、Gradle、Android Studio版本关系

参考链接 Android Gradle Plugin 与 gradle 对应关系 插件版本所需的最低 Gradle 版本8.38.48.28.28.18.08.08.07.47.57.37.47.27.3.37.17.27.07.04.2.06.7.14.1.06.54.0.06.1.13.6.0 - 3.6.45.6.43.5.0 - 3.5.45.4.13.4.0 - 3.4.35.1.13.3.0 - 3.3.34.10.13.2.0 - 3.2.14.63…...

PyTorch深度学习实战(30)——Deepfakes

PyTorch深度学习实战(30)——Deepfakes 0. 前言1. Deepfakes 原理2. 数据集分析3. 使用 PyTorch 实现 Deepfakes3.1 random_warp.py3.2 Deepfakes.py 小结系列链接 0. 前言 Deepfakes 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…...

java 修改JsonObject对象所有的Value类型为String

将JSONObject 或者JSONArray 中所有Value 为数值类型 转为String. 转换前: [{"zjlx": 201,"xm": "刘**","cbdjxxlist": [{"zspmdm": 102031201,"rybm": "43000010300000411195","jfrlx": 1…...

Vue3-47-Pinia-修改全局状态变量值的方式

说明 修改全局状态变量的值,是一个比较常规而且常见的操作。 本文就介绍四种常见的操作。 由于Option Store 和Setup Store 在修改的时候略有不同,所以本文也会将不同点体现一下。 全局状态变量的定义 包含了 Option Store 和Setup Store 两种定义方式&a…...

【Scala】——面向对象

1 Scala 包 1.1 包风格 Scala 有两种包的管理风格。 第一种 Java 的包管理风格相同,每个源文件一个包(包 名和源文件所在路径不要求必须一致),包名用“.”进行分隔以表示包的层级关系,如 com.atguigu.scala。另一种风…...

【MediaFoundation】OpenCV VideoCapture 读取音频源码

OpenCV 读取音频代码实例 在windows7 以及OpenCV4 过后可以使用 CAP_MSMF 读取音频&#xff0c;但是OpenCV没有播放音频的API。代码示例如下。 本文解析OpenCVCAP_MSMF 进行文件、设备的 音频读取&#xff0c;学习MediaFoundation 的使用。 #include <opencv2/core.hpp>…...

2024秋招,百度测试开发工程师一面

前言 大家好&#xff0c;今天我来回顾一下秋招中的一场很重要技术面试 一面面试官深挖我的项目经历&#xff0c;并提出了很多的实际场景&#xff0c;我现在回顾依然有很多新的认识 过程 自我介绍实习工作中&#xff0c;做得最好的地方是什么&#xff1f; 我先介绍了一下实习…...

Git 使用与问题记录 二(公司快速上手版)

写在前面 记录自己学习的内容&#xff0c;方便后面忘记的时候查看。给像我一样的新手提供一点参考 正文 上一章已经安装好了Git&#xff0c;如何使用呢。我这里会分享两种办法&#xff0c;第一种是在VS2022中克隆代码&#xff0c;修改和提交&#xff1b;第二种是用命令提交。…...

【C语言小游戏】贪吃蛇

文章目录 1.引言2.运行图2.涉及知识3 Windows API3.1 控制台3.2 控制台屏幕坐标3.3 操作句柄3.4 控制台屏幕光标3.5 监视按键 4. 设计说明5. 完整代码 1.引言 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇 实现基本的功能&#xff1a; 贪吃蛇地图绘制蛇吃⻝物的…...

价值7500的在线授权网站源码支持IP+域名+双向授权全开源

PHP授权验证更新系统完整版&#xff0c;一键更新系统&#xff0c;一键卡密生成自助授权功能&#xff0c;域名ip双重验证功能等等 修复盗版检测&#xff0c;确保实时查看盗版 修复在线加密系统&#xff0c;一键加密 授权系统几乎所有的程序都能整合使用,包括您的app和计算机程序…...

haiku实现门控多头注意力模块

在多头注意力机制中&#xff0c;通常输入的数据包括查询&#xff08;Q&#xff09;、键&#xff08;K&#xff09;和值&#xff08;V&#xff09;。这些数据的维度以及权重矩阵的维度在多头注意力机制中扮演关键角色。下面对数据及权重的维度进行解释&#xff1a; 输入数据&…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点&#xff1a; 共 6 个字段&#xff1a; Year&#xff08;年&#xff09;Month&#xff08;月&#xff09;Day&#xff08;日&#xff09;Hour&#xff08;小时&#xff09;Minute&#xff08;分钟&#xff09;Second&#xff08;秒&#xff09; 表示…...