java IO笔记(网络中IO的运用)

Java网络IO演进之路 你对网络IO了解多少?别被面试官打败到一个被问烂了的知识点上面! 阅读详情

如今大部分的编程开发都离不开网络,Java IO同样可以基于网络进行开发。事实上网络编程可以看做两个进程之间的通信,我们可以通过java对网络的支持,建立两点的网络连接,连接建立成功之后,就可以看做是本地的文件操作了。前面对于文件进行的类似操作也可以适用在这里。

我们常用的有TCP/UDP建立连接,下面将分别举例说明:

TCPClient:

package NetIo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
	private Socket socket;
	private boolean connectFlag;
	private InputStream is;
	private OutputStream os;
	private byte[] buffer = new byte[1024];

	public static void main(String[] args) {
		TCPClient client = new TCPClient();
		if (client.initSocket()) {
			client.execute();
		} else {
			System.out.println("the connect has some wrong.");
		}
	}

	private boolean initSocket() {
		try {
			socket = new Socket("127.0.0.1", 5008);
			socket.setSoTimeout(2000);
			connectFlag = true;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return connectFlag;
	}

	private void execute() {
		String message = "Hello World!";
		try {
			is = socket.getInputStream();
			os = socket.getOutputStream();

			int len;
			os.write(message.getBytes());
			while (true) {
				len = is.read(buffer);
				if (len != -1) {
					String response = new String(buffer, 0, len);
					System.out.println("从服务器接收的消息为" + response);
					break;
				}
			}
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
TCPServer:

package NetIo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer implements Runnable{
	private ServerSocket serversocket;
	private Socket socket;
	private boolean connectFlag;
	private InputStream is;
	private OutputStream os;
	private byte[] buffer = new byte[1024];
	
	public TCPServer(){
	}
	
	public TCPServer(Socket socket){
		this.socket = socket;
	}
	
	public static void main(String[] args) {
		TCPServer server = new TCPServer();
		if(server.initServer()){
			server.execute();
		}else {
			System.out.println("there are some mistakes when connect");
		}
	}
	
	private boolean initServer(){
		try {
			serversocket = new ServerSocket(5008);
			connectFlag = true;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return connectFlag;
	}
	
	private void execute(){
		while(true){
			try {
				socket = serversocket.accept();
				new Thread(new TCPServer(socket)).start();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	@Override
	public void run() {
		try {
			
			String host = socket.getInetAddress().toString();
			int port = socket.getPort();
			os = socket.getOutputStream();
			is = socket.getInputStream();
			while(true){
				if(socket.isClosed()){
					return;
				}
				int len = is.read(buffer);
				if(len != -1){
					System.out.println("从地址为"+host+"端口为"+port+"的客户端发来消息:"+new String(buffer,0,len));
					os.write("服务器已接收消息成功".getBytes());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

先执行服务端,在执行客户端代码,可以在控制台看到如下打印:


上面的两个例子模拟了TCP通信,从中可以看出IO在网络编程中也是有着一席之地的。

下面将举例说明基于UDP的网络IO。

UDPClient:

package NetIo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient {

	public static void main(String[] args) throws IOException {
		DatagramSocket socket = new DatagramSocket();
		String message = "Hello World!";
		byte[] buffer = message.getBytes();
		InetAddress address = InetAddress.getByName("127.0.0.1");
		DatagramPacket packet = new DatagramPacket(buffer, buffer.length,
				address, 5000);
		socket.send(packet);
		while (true) {
			byte[] buf = new byte[1024];
			DatagramPacket receivePacket = new DatagramPacket(buf, buf.length);
			socket.receive(receivePacket);
			String response = new String(receivePacket.getData(), 0,
					receivePacket.getData().length);
			if (response != null) {
				System.out.println("从服务端成功接收消息:" + response);
				socket.close();
				break;
			}
		}
	}

}

UDPServer:

package NetIo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.concurrent.atomic.AtomicInteger;

public class UDPServer implements Runnable {
	private DatagramSocket socket;
	private DatagramPacket packet;

	public UDPServer(DatagramSocket socket, DatagramPacket packet) {
		this.socket = socket;
		this.packet = packet;

	}

	public static void main(String[] args) throws IOException {
		AtomicInteger numThreads = new AtomicInteger(0);
		DatagramSocket socket = new DatagramSocket(5000);
		while (true) {
			byte[] buf = new byte[1024];
			DatagramPacket packet = new DatagramPacket(buf, buf.length);
			socket.receive(packet);
			Thread thread = new Thread(new UDPServer(socket, packet));
			thread.start();
			numThreads.incrementAndGet();
		}
	}

	@Override
	public void run() {
		String message = new String(packet.getData(), 0,
				packet.getData().length);
		int port = packet.getPort();
		InetAddress address = packet.getAddress();
		System.out.println("get a message from address:" + address + " port:"
				+ port + " message:" + message);
		String respose = "服务器已成功收到消息";
		DatagramPacket resPacket = new DatagramPacket(respose.getBytes(),
				respose.getBytes().length, address, port);
		try {
			socket.send(resPacket);
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
先执行服务端,在执行客户端代码,可以在控制台看到如下打印:



上面的两个例子模拟了UDP简单通信。





路由三大分类:直连路由、静态路由、动态路由 直连路由、静态路由和动态路由各有其独特的特点和适用场景。直连路由适用于简单的直接连接网络,静态路由提供了精确的路径控制,而动态路由则在大型复杂网络中展现出强大的适应性和自动化能力。了解和掌握这三种路由类型的配置和管理,对于网络管理员来说,是确保网络高效、安全运行的重要技能。 阅读详情

相关推荐

物理小白也能懂的PINN指南:用Python给神经网络注入‘物理常识‘

本文为物理小白提供了一份通俗易懂的PINN入门指南。通过生活化类比和Python实战,详细讲解了如何将物理定律作为约束注入神经网络,使其具备“物理常识”,从而在数据稀缺时也能做出符合规律的预测。文章以热传导方程为例,手把手教你从零构建物理信息神经网络。

open4的博客 348

Java IO: 管道

Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为数据源以及目标媒介。 你不能利用管道与不同的JVM中的线程通信(不同的进程)。在概念上,Java的管道不同于Unix/Linux系统中的管道。在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信。在Java中,通信的双方应该是运行在同一进程中的不同线程。 通过Java IO创建管道 可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道。一个P

weixin_51393513的博客 341

【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南

海康威视MVS机器视觉软件安装与使用指南:首先从官网下载MVS 4.3.0安装包,默认设置完成安装。安装后可在Development目录查看示例代码、开发文档及头文件,支持C++/C#/Python等多语言开发。软件内置虚拟相机功能,通过工具菜单添加虚拟设备后即可模拟真实相机操作,支持中英文界面切换、参数调节(曝光/增益等)及图像采集功能。虚拟相机虽仅能显示预设图像,但完整保留了参数调节功能,适合开发者进行功能测试。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3305

java流意外结束_java.io.IOException:Connection上意外的流结束?

调用我们的内部Web服务似乎会出现以下错误:java.io.IOException: unexpected end of stream on Connection{webservicessandbox.xxx.com:443, proxy=DIRECT@ hostAddress=174.143.185.13 cipherSuite=TLS_ECDHE_RSA_WITH_AES_256_CBC_SH...

weixin_42183453的博客 1922

动态知识图谱构建:从本体论到工程实践

知识图谱作为语义网和人工智能领域的核心技术,旨在通过结构化的方式表示和组织知识。其核心原理在于将实体、概念及其关系建模为图结构,从而支持复杂的语义推理和关联查询。这一技术为机器理解数据间的深层联系提供了基础,在智能推荐、企业知识管理和学术研究等领域具有重要价值。通过结合自然语言处理(NLP)和图数据库技术,系统能够从非结构化数据中自动抽取知识,并构建动态演化的认知网络。本文以“本体论章鱼”项目为例,探讨了如何实现从静态本体到动态知识网络的范式转变,并详细解析了其分布式感知、适应性学习的架构设计,为构建灵活可

weixin_30731305的博客 656

手把手教你读懂蓝牙BQB射频测试报告:以PRBS9为例的实战分析

本文以蓝牙BQB射频测试中的PRBS9信号为例,提供了一份实战分析指南。文章深入解读了输出功率、调制特性、邻道泄漏等核心测试项,并分享了信号分析仪操作技巧、测试环境搭建要点及设备选型建议,旨在帮助工程师精准解读报告,高效定位问题,确保产品顺利通过认证。

weixin_29289821的博客 261

java io运用_java IO笔记(网络中IO的运用)

如今大部分的编程开发都离不开网络,Java IO同样可以基于网络进行开发。事实上网络编程可以看做两个进程之间的通信,我们可以通过java对网络的支持,建立两点的网络连接,连接建立成功之后,就可以看做是本地的文件操作了。前面对于文件进行的类似操作也可以适用在这里。我们常用的有TCP/UDP建立连接,下面将分别举例说明:TCPClient:package NetIo;import java.io.IO...

weixin_32487647的博客 150

Skynet 框架面试题

本文整理了游戏服务端开发面试中 Skynet 框架的高频考点,涵盖底层架构、消息派发、协程调度、网络 I/O、harbor 跨机通信、内存管理、socket 处理、阻塞操作、错误处理等核心内容。全面覆盖 Skynet 框架的原理、使用和实战问题,追求深入准确,拒绝八股文。

小赖的博客 381

Java网络IO学习笔记

java网络io学习笔记

m0_55810383的博客 1053

LIN协议栈 AUTOSAR架构下 状态管理

LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。

汽车电子从业者,电子爱好者。 2051

自顶向下与自底向上编程思想的对比

一、核心定义与本质差异自顶向下编程思想如同绘制一幅完整的地图,从整体轮廓逐步细化到局部细节。其本质是从系统的整体目标出发,通过逐层分解将复杂问题简化为可实现的子问题,强调先定义 “做什么”,再考虑 “如何做”。自底向上编程思想则类似于搭建积木,从基础组件开始逐步构建复杂系统。其本质是从现有资源和基础功能出发,通过组合和扩展简单组件来实现复杂功能,强调先解决 “如何做” 的细节,再整合为 “做什么” 的整体。二、设计起点与逻辑流程对比设计起点:以系统的整体目标和业务需求为起点。例如设计一个电商平台,首先明确

二进制君 830

彻底搞懂Java的网络IO

IO是Input/Output的缩写。Unix网络编程中有五种IO模型: blocking IO(阻塞IO) nonblocking IO(非阻塞IO) IO multiplexing(多路复用IO) signal driven IO(信号驱动IO) asynchronous IO(异步IO) 背景 java.io包基于流模型实现,提供Fil...

全菜工程师小辉的博客 4091

手把手教你学simulink(16.10)-- 基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目

基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目的详细实例介绍。这个项目将重点放在IIR滤波器的设计、实现和仿真上,帮助你理解和应用IIR滤波器在信号处理中的作用。

MHD0815的博客 706

【Java】网络通信IO模型

模型BIONIOAIO阻塞性同步阻塞同步非阻塞异步非阻塞线程模型1 连接 1 线程多路复用(单线程/线程池)回调驱动复杂度低中高高适用场景低并发、简单应用高并发、实时响应(如 Netty)特定场景(如文件操作)接口SocketBIO:仅用于教学或低负载场景。NIO:大多数高并发场景的首选,结合 Netty 等框架简化开发。AIO:谨慎使用,需评估操作系统支持与业务需求。为什么主流框架(如 Netty)选择 NIO 而非 AIO?

athicket 1558

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JAVA IO流之网络IO

网络IO一个好的体验就是占用的CPU资源少 并且效率快。阻塞IO当一个服务被占用 就需要等待调用该服务 效率低;非阻塞IO 等待时间优化了,但不断的轮询准备数据会大量浪费资源;多路复用IO 只占用一个线程,放在selector多路复用器上进行轮询处理,支持多个channel,每个channel数据准备好后再返回。

still_five_Days的博客 1162

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java IO:网络IO模型

网络IO模型有5种,分别为:阻塞式IO,非阻塞式IO,IO复用,信号驱动式IO 和 异步IO。 一.  操作系统如何处理IO     Linux 会把所有的外部设备都看成一个文件来操作,对外部设备的操作可以看成是对文件的操作。我们对一个文件的读写,都会通过内核提供的系统调用,内核会给我们返回一个 File Descriptor,这个描述符是一个数字,指向内核的一个结构体,我们应用程序对

不更新了 1384

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java IO网络模型

首先来看网络是什么东西,他最核心的地方便是通信,即发消息和收消息。A给B发消息,然后B收取A发的消息。那么发消息的过程也有很多的不同,最常见的有阻塞IO,非阻塞IO,多路复用,异步IO。这里主要讲阻塞IO,非阻塞IO和多路复用。

sbysgysby的博客 928

✨Java网络IO模型✨分析与实现

本篇文章会对Java中的网络IO模型的概念进行解释,并给出具体的Java代码实现,最后会对同步和异步,阻塞和非阻塞进行概念总结

用朴素的话说技术。 789

java 网络io

从linux底层-》nio-》netty-》组件的线程模型详细且不太深入的了解网络IO

chenXiJ的博客 728

网络通信和IO(1):网络通信与IO基本概念/什么是IO,什么是网络通信/文件IO和网络IO的区别/什么是文件描述符/什么是阻塞IO(BIO)/什么是非阻塞IO(NIO)/JAVA中的IO

IO和网络通讯基础概念 首先要从冯诺依曼说起,由他提出的计算机体系结构: 计算器控制(CPU…) ——> 主存(内存…) ——> 输入输出(硬盘、网卡、显示器、键盘…) IO说白了就是输入输出,宏观角度讲可以分为IO设备和IO接口两个部分,IO设备就是输入输出设备,IO设备的工作方式可以由程序进行控制的。IO接口可以理解为 “计算机和其他计算机”,或者 ,“程序与计算机的IO设备”之间的传输接口。 IO它对于任何计算机系统都非常关键,因为所有 I/O 的主体实际上是内置在操作系统中的。程序一

qq_40373699的博客 5675

Java网络编程06 - IO详解

Java网络编程06 - IO详解

qq_43350524的博客 1225

Java学习笔记-IO流

存储和读取数据的解决方案。作用:IO流用于读写文件中的数据,

qq_45773654的博客 1250

网络IO与磁盘IO

Java中的IO体系:在Java中I/0流操作的类很多,但是核心体系实际上就只有File、lnputStream、OutputStream、Reader、Writer. IO流的分类: IO流的数据来源 1.网络 2.磁盘 //磁盘 FileInputStream fi = null; //创建管道 try { fi = new FileInputStream("d:/111/123.txt"); //存放在磁盘..

w7486的博客 2026

Java笔记——Java IO用法详解

在进行磁盘或网络IO时,原始的InputStream对数据读取的过程都是一个字节一个字节操作的,而BufferedInputStream在其内部提供了一个buffer,在读数据时,会一次读取一大块数据到buffer中,这样比单字节的操作效率要高的多,特别是进程磁盘IO和对大量数据进行读写的时候。需要注意的是java中的管道和Unix/Linux中的管道含义并不一样,在Unix/Linux中管道可以作为两个位于不同空间进程通信的媒介,而在java中,管道只能为同一个JVM进程中的不同线程进行通信。

a25847a的博客 1568

Java 中的阻塞 IO 和非阻塞 IO

IO(输入输出)操作是一个基础而又关键的部分。在 Java 中,处理 IO 通常涉及到阻塞 IO 和非阻塞 IO 两种模式。本文将介绍这两种模式的概念、特点以及在 Java 编程中的应用场景与区别。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 5870

网络模型——四种常见网络IO模型

文章目录1.IO读写原理1.1 内核缓冲区和进程缓存区1.1.1 用户进程和操作系统1.1.2 缓冲区的目的1.2 Java读写IO底层流程2.四种主要的IO模型2.1 基本概念2.1.1 阻塞与非阻塞2.1.2 同步与异步2.1.3 四种IO模型2.2 同步阻塞IO(Blocking IO) 网络IO模型一共介绍以下四种: 同步阻塞IO、同步非阻塞IO、IO多路复用和异步IO。 1.IO读写原理 文件的读写还是socket读写,在Java应用层开发,都是input或者output处理 用户程序进行IO操

weixin_45075135的博客 5479
上一篇: JavaScript学习笔记(常用内置对象)
下一篇: java IO笔记(ByteArrayInputStream/ByteArrayOutputStream)
moonfish0607
博客等级 码龄11年 26粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

moonfish0607

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值