Java 网络文件传输

java网络编程怎样实现文件传输? 设计一个简单的文件传输程序,服务器接受文件,客户端发送文件,设计一个简单的文件传输协议,比如,先传输文件名,再传输文件大小,再传输文件内容。 设计不合理。 一个文件信息,不需要分成几个包来来回回请求应答。 协议格式类似如下: 8位数据包总长+3位文件名长度+文件名+8位文件内容长度+文件内容 以上为变长报文格式,举例如下: 00001048+008+test.txt+00001024+文件内容 要么像2L所定义的协议那样发送,简单 要么就像你期望的那样,定义协议位数据长度(固定长度)+数据类型(.. 阅读详情

Java 网络文件传输

作者: 何双江

 

关键字: Java  何双江  IO  NET  File

 

读者范围:

本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.

 

正文:

关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:

 

 

图1:

分析图1我们基本可以知道从服务器文件系统中通过流把文件中的数据写入到服务器的进程中,然后把进程中的数据通过网络IO系统传递到客户机,这个阶段,网络中的数据以字节流的形式保存.当该字节流被客户进程接受后,客户进程通过客户本地文件流写入客户本地的文件系统中.

 

根据以上分析,我们基本可以确定我所需要处理的问题了.首先我们需要可以对本地文件系统IO操作的操作接口,然后是一个可以对网络IO系统进行操作的操作接口,已经一个可以把数据包装成字节流的操作接口,他们分别可以提供客户和服务器两个进程进行读写的操作.如下图所示:



图
2:

根据以上分析,我们可以把问题归结到对以下编程接口的需求上:

1.         字节包装器和字节解包器,

2.         网络传输器和网络接收器

3.         本地文件读/写器

 

而这些Java本身的API就已经提供.他们都被包装到java.io和java.net这两个包里,这里我提供一个基于TCP/IP的实现版本,使用基于连接的方式来完成工作.我们首先介绍几个相关的JDK中的类来完成以上任务,

1.       DataOutputStream和DataInputStream实现类提供了上面的字节包装和解包器的实现

2.       ServerSocket和Socekt提供了基于连接的网络传输和接受接口

3.       File,FileInputStream和FileOutputStream提供了基本的本地文件输入输出接口.

 

 

服务器端实现代码:

import java.io.*;

import java.net.*;

 

public class FileServer{

       public static void main(String[] args)throws Exception{

              //创建文件流用来读取文件中的数据

              File file=new File("lishengjie.jpg");

              FileInputStream fos=new FileInputStream(file);

             

              //创建网络服务器接受客户请求

              ServerSocket ss=new ServerSocket(3108);

              Socket client=ss.accept();

             

              //创建网络输出流并提供数据包装器

              OutputStream netOut=client.getOutputStream();

              OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));

             

              //创建文件读取缓冲区

              byte[] buf=new byte[2048];

              int num=fos.read(buf);

              while(num!=(-1)){//是否读完文件

                     doc.write(buf,0,num);//把文件数据写出网络缓冲区

                     doc.flush();//刷新缓冲区把数据写往客户端

                     num=fos.read(buf);//继续从文件中读取数据

              }

              fos.close();

              doc.close();

       }

}

 

客户方实现代码:

import java.io.*;

import java.net.*;

 

public class FileClient{

       public static void main(String[] args)throws Exception{

              //使用本地文件系统接受网络数据并存为新文件

              File file=new File("newFile.jpg");

              file.createNewFile();

              RandomAccessFile raf=new RandomAccessFile(file,"rw");

             

              // 通过Socket连接文件服务器

              Socket server=new Socket(InetAddress.getLocalHost(),3108);

             

              //创建网络接受流接受服务器文件数据

              InputStream netIn=server.getInputStream();

              InputStream in=new DataInputStream(new BufferedInputStream(netIn));

             

              //创建缓冲区缓冲网络数据

              byte[] buf=new byte[2048];

              int num=in.read(buf);

             

              while(num!=(-1)){//是否读完所有数据

                     raf.write(buf,0,num);//将数据写往文件

                     raf.skipBytes(num);//顺序写文件字节

                     num=in.read(buf);//继续从网络中读取文件

              }

              in.close();

              raf.close();

       }

}

归结以上代码:

服务器

客户端

1.       服务器从本地文件系统读取文件

2.       服务器创建网络服务连接

3.       服务器提供数据包装器

4.       服务器将本地文件写入数据包装器

5.       服务器通过包装器写入到网络

1.       客户端建立新文件准备存储来自网络的数据

2.       客户端连接服务器

3.       客户端通过网络接受服务器数据并进行数据解包

4.       客户端将数据写入缓冲区

5.       客户端从缓冲区把数据写入客户本地文件

 

总结:

       事实上java的开发环境为我们提供大多数的编程接口,为我们简化了开发工作量.我们通过java的IO接口所提供的文件,数据包装器等接口非常方便的解决了我们上面的开发工作量.同时在java的net接口所提供的套接字也使得基于连接的数据接受和发送成为非常容易的工作.

java实现文件传输(附完整源码) 阅读详情

相关推荐

Java实现文件传输

在Java编程中,我们可以使用各种方法实现文件传输。文件传输是将文件从一个位置传输到另一个位置的过程,可以用于各种应用场景,如文件备份、文件共享等。下面我将介绍一种基于Socket的Java文件传输实现方法。首先,我们需要建立一个服务器和一个客户端来进行文件传输。服务器将监听来自客户端的连接请求,并接收文件数据,而客户端将连接到服务器并发送文件数据。客户端连接到服务器后,将指定的文件数据发送给服务器。在实际应用中,你可能需要添加更多的错误处理和安全性措施,例如校验文件完整性、处理并发连接等。

CyberLancer的博客 596

内网java_java 实现局域网文件传输的实例

java 实现局域网文件传输的实例本文主要实现局域网文件传输的实例,对java 的TCP知识,文件读写,Socket等知识的理解应用,很好的实例,大家参考下,实现代码:ClientFile.java/*** 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com* @author 小沫*/package com.tcp.file;import java.io.File;import ...

weixin_35897853的博客 1054

java写的局域网文件传输系统

java写的局域网文件传输系统,j2se的简单应用

循序渐进Socket网络编程(多客户端、信息共享、文件传输)

1、TCP/IP协议   既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输。这里就要使用到TCP/IP协议。   TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成。IP层负责网络主机的...

chenyue1458的博客 457

Windows安装Pytorch3d

pytorch和pytorch3d版本对应关系如下:https://github.com/facebookresearch/pytorch3d/releasescuda和NVIDIA CUB版本对应关系如下:https://github.com/NVIDIA/cub/releases?page=1本人配置如下:GPU:1050TiCUDA:11.1python:3.8。

Snakewood的博客 4287

UDS诊断ISO14229新手入门篇

这个命令的格式稍微复杂一点。sub-function = 0x06 用于读取某个 DTC 及其相关的环境数据,此时 parameter 为 4 个 byte,前三个 byte 用于标识我们要读取的 DTC,第四个 byte 用于标识要读取的环境数据的范围,UDS 规定使用 FF 来表示读取所有的环境数据,各厂家可以要根据自己的需求定义其他的值来代表要读取的环境数据的范围。环境数据包括 DTC 状态,优先级,发生次数,老化计数器,时间戳,里程等,厂家还可以根据自己的需求定义一些此 DTC 产生时的测量数据。

weixin_45387165的博客 1974

Java网络文件传输

Java 网络文件传输 Java 网络文件传输读者范围:本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.正文:关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:图1:分析图1我们基本可以知道从

MyObject的专栏 1702

yolov5深度剖析+源码debug级讲解系列(一) yolov5的架构和源码debug准备

前言 前段时间分析了yolov3的源码,这次想带着小伙伴一起把yolov5完全掌握。博主还是保持着一贯的风格,依旧采用debug级别的源码剖析。目的就是让大家可以通过一个系列的文章就把yolov5的架构、设计理念和每一行源码都弄懂。只要小伙伴可以花时间把这个系列读完,就会对yolov5的理解有所提升。 去年参加了kaggle的小麦检测比赛,yolov5在比赛的中段开始呈现霸榜趋势,超越了efficientdet。虽然最后yolov5因为权限等某些问题被kaggle官方禁用了,但是仍然体现出了其强大的能力。值

人唯优的博客 4万+

java file 网络文件_Java 网络文件传输

读者范围:本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.正文:关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:图1:分析图1我们基本可以知道从服务器文件系统中通过流把文件中的数据写入到服务器的进程中,然后把进程中的数据通...

weixin_30956665的博客 1370

光学测量仿真软件:Zygo_(12).Zygo软件的用户界面与操作指南

Zygo软件支持用户自定义工具和插件,以扩展软件的功能和适应特定的仿真需求。编写脚本使用Python或其他支持的脚本语言编写自定义工具的脚本。例如,编写一个脚本来计算光束的衍射效率。# 示例脚本:计算光束的衍射效率 import zygo # 导入Zygo软件的API def calculate_diffraction_efficiency(wavelength , grating_period , angle) : """计算光束的衍射效率:param wavelength: 光源波长(单位:米)

kkchenjj的博客 1669

极智AI | 详解 ViT 算法实现

大家好,我是极智视界,本文详细介绍一下 ViT 算法的设计与实现,包括代码。

极智视界 5604

基于JAVA的网络编程——socket文件传输

基于JAVA的网络编程——socket文件传输 文章目录基于JAVA的网络编程——socket文件传输效果图步骤文件结构实现代码 效果图 步骤 客户端实现步骤: 1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源 2.创建一个客户端Socket对象 ,构造方法中绑定服务器的IP地址和端口号 3.使用Socket中的方法getOutputStream,获取网络字节输出流0utputStream对象 4.使用本地字节输入流FileInputstream对象中的方法rea

Gowi的博客 1958

AI原生SaaS应用的自动化运维体系构建

随着ChatGPT掀起的AI原生应用浪潮,越来越多SaaS(软件即服务)产品开始以"AI优先"的方式设计——从用户交互到核心功能,都深度依赖机器学习模型(如推荐算法、智能客服)、实时数据流(如用户行为分析)和弹性算力(如大模型推理)。这类应用的运维需求与传统SaaS完全不同:传统运维像"修水管",哪里漏了补哪里;AI原生运维则像"照顾会成长的宠物",需要实时感知模型状态、数据变化和流量波动,主动调整资源。

AI天才研究院 1080

(转)Java 网络文件传输

<br /><br /> <br />Java 网络文件传输<br /><br />觉得写的挺好,就转过来了。<br />本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.<br />正文:<br />关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:<br />图1:<br />分析图1我们基本可以知道从服务器文件系统中通过流把文件中

crystal_86的专栏 442

多出来的那一截:Java 堆外内存 OOM 的来源分账、分流排查与治理解析

Java进程的RES常比-Xmx多出一截,堆却平稳。本文把堆外内存拆成直接缓冲区、Unsafe、JNI本地库、线程栈、元空间与文件映射六类,用JDK 8与17的六组实验对照RSS、NMT、BufferPool三本账:clear()不释放内存;MaxDirectMemorySize默认约等于堆上限且只管直接缓冲区;禁用显式GC会让申请线程退避半秒后失败;未关闭的Deflater零GC下让RSS涨1GB;Netty池内泄漏GC救不回。最后给出定性、对账、定位的排查路线与预算、编码、监控三层治理。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 14万+

基于传感器数据实现火灾报警预测分析

火警 系统当检测到烟雾、火灾、一氧化碳或其他与火灾有关或一般通知的紧急情况时,向人们发出警告

DT程序员的博客 723
上一篇: 浅出Java 的Xml编程
下一篇: Jsp数据分页
yarshray
博客等级 码龄25年 72粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值