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 读取音频,但是OpenCV没有播放音频的API。代码示例如下。 本文解析OpenCVCAP_MSMF 进行文件、设备的 音频读取,学习MediaFoundation 的使用。 #include <opencv2/core.hpp>…...
2024秋招,百度测试开发工程师一面
前言 大家好,今天我来回顾一下秋招中的一场很重要技术面试 一面面试官深挖我的项目经历,并提出了很多的实际场景,我现在回顾依然有很多新的认识 过程 自我介绍实习工作中,做得最好的地方是什么? 我先介绍了一下实习…...
Git 使用与问题记录 二(公司快速上手版)
写在前面 记录自己学习的内容,方便后面忘记的时候查看。给像我一样的新手提供一点参考 正文 上一章已经安装好了Git,如何使用呢。我这里会分享两种办法,第一种是在VS2022中克隆代码,修改和提交;第二种是用命令提交。…...
【C语言小游戏】贪吃蛇
文章目录 1.引言2.运行图2.涉及知识3 Windows API3.1 控制台3.2 控制台屏幕坐标3.3 操作句柄3.4 控制台屏幕光标3.5 监视按键 4. 设计说明5. 完整代码 1.引言 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇 实现基本的功能: 贪吃蛇地图绘制蛇吃⻝物的…...
价值7500的在线授权网站源码支持IP+域名+双向授权全开源
PHP授权验证更新系统完整版,一键更新系统,一键卡密生成自助授权功能,域名ip双重验证功能等等 修复盗版检测,确保实时查看盗版 修复在线加密系统,一键加密 授权系统几乎所有的程序都能整合使用,包括您的app和计算机程序…...
haiku实现门控多头注意力模块
在多头注意力机制中,通常输入的数据包括查询(Q)、键(K)和值(V)。这些数据的维度以及权重矩阵的维度在多头注意力机制中扮演关键角色。下面对数据及权重的维度进行解释: 输入数据&…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
