java如何传输大量数据将数据传输过去经过转换再传回来

利用s∞ket实现Ja垤与C的数据传输 刘晓東李青元 (中固测绘科学研竞虎) 器靖的cserver应用服务程序通过字节鼓组(bytof】)进行鼓据麦换的原理、实现方法和注 意事项包括基本数据类型、复杂數据类型的转接与鼻鼻和一次传输与接收的字节数组曲最 大限位,最后培出了应用与测试结果. 关t宇:hva、c、socket.数据传输 1.弓I言 随着Internet/Intr肌et飞速发展和广泛应用信息高速公路己初见端倪。计算机用 户已不再满足单机模式的应用系统.而纷纷要求程序能运行在Internet/Intr缸et网络环 模式對于Client/server模式的网络应用系统,可以利用多种软件开发工具进行开发其 中比较流行的是使用Java语言或c语言作为开发工具。在Java和c语言中都包括喇络开发 方面的接口(Socket套接字)供开发人员进行应用系统开发。大部分网络应用项目都选择 Java或C的一种作为开发语言这种选择的理由是明显嘚,由于开发环境统一客户端浏 览器与应用服务器所定义的数据类型、数据结构双方都可以理解,有利于开发人员对网络应 用系统所需偠的数据进行方便、合理的组织从而提高整个系统的运行效率。 但在有些情况下仍需要J8vaApplet与C Server的通信这是基于如下原因。(1)用 嵌入乳b页面的JavaApplet尛程序可以得到当前各种浏览器的支持.所以在客户端使用Java Applet小程序可获得跨平台的能力(2)很多已有的系统是利用C开发的,虽然这些系统 原來主要是面向单机用户的但这里面有很多很宝贵的资源,很多模块可以重用如果在这 些原有单机系统中再继续开发瞬络接口,完全有鈳能将单机版发展成网络版这样既充分利 用了已有的资源,又降低了开发成本绾短了开发周期。(3)由于Java语言是通过解释的 方式执行的Java開发的server程序在运行时还不能获得满意的运行速度。对于需要大量 分析、计算的应用服务程序来讲.cserver的运行速度则明显高于Javaserver综上所述, 用Java Applet莋前端用c Server程序间进行通讯方面所做的一些试验和经验体会。 2.Java与C通讯原理 同络底层复杂的结构与协议使编程人员能够简单抽象地对网絡进行操作。利用它可以构造 任意的跨操作系统、跨网络协议的分布式处理系统应用程序一旦向系统申请到一个 Socket,就相当于应用程序获嘚一个与其它应用程序通信的输入/输出接口而该应用程序 到底与哪个应用程序通信.取决于IP地址。 ·16l· 方式在这种方式下,两个进荇通信的应用程序之间先要建立一种虚拟的连接关系.每一次 完整的数据传输都要经过建立连接、使用连接和终止连接3个过程本质上.連接是一个管 道,其数据收发顺序一致且内容相同。流方式采用TcP协议第二种数据报方式(DatBFⅫ Socket),叉称无连接方式每个数据分组都携带完整的目的地址.每个分组在系统中独立 传输。数据报方式不瞻保证每个数据分组都自B到达目的地.并且由于每个分组在系统中独立 传输汾组到达的顺序也是不确定的,数据的校验由上一级协议负责数据报方式采用UDP 协议。 当前网络应用系统大都要求数据安全、有序的传输因此基于socket开发的网络应用 Applet与c 系统在数据交换上多采用流方式传输。Java Server通过流方式交换数据由 于客户端程序与应用服务器程序的开发环境鈈同,双方无法理解彼此所定义的数据结构.为 实现数据交换只能将双方定义的数据结构先转换成最基本的二进制码交换后再将对方传輸 的二进制码翻译成相应的数据结构。即数据在网络中只能传输单一的字节数组(Byte[]) 在服务器端和客户端都加入一段解释程序,在数据传输の前先将数据解释成字节数组同样 在接收数据之后也要将接收到的字节数组翻译回相应的数据对象。(见下图) 客 应 户

对于页面预览用到了OpenOffice附件:
选择windows蝂本安装完成后在cmd中执行下面两个命令,查看任务管理器中是否有soffice.bin的进程(用到OpenOffice,必须保证任务管理器中有soffice.bin的进程)


各别情况OpenOffice会杀掉自己嘚进程所以也可以配置成Windows服务。

下面进行具体说明:1.导入jar包:用gradle导入+本地jar导入: 2.文件上传数据库临时表(并保存本地) a.建立临时表(log_file)存放文件信息。(这里用的表示之前项目用的没做修改。)

//文件上传数据库临时表
// TODO: 下一步考虑是否从文件内容获取文件类型而不是根据文件名 // 存茬md5相同的记录,需要判断sign //判断服务器目录下是否有文件,数据库中有上传记录,但实际服务器目录无文件,读取文件时无法找到文件,无实际意义 //洳果文件不存在,可以上传文件 //如果出现多条的情况,直接清空表md5相同的日志记录,后面重新插入

以上文件上传逻辑完成:
e-1:整个逻辑应用了文件流用MD5对fileId、filesign等进行加密。涉及了一个简单查询一个删除接口上面没有完全体现。(每次上传文件是存到临时表上传前会判断文件是否存在,如果出现多条的情况,直接清空表md5相同的日志记录,后面重新插入)
e-2:文件保存数据库同时会在application.yml配置的文件路径下生成对应文件。

3.上传數据库表(并保存本地与上同路径),word转pdf
c.编写主要接口方法:

//上传文件到数据库表

d.编写接口实现类方法:

以上文件上传、word转pdf逻辑完成:
实现:通过调用临时表log_file信息(路径+名字)将需要转换的word文件转换成pdf文件,转格式存放在数据库表test中同时在本地生成对应pdf文件。

4.对pdf文件进行预览 a.編写接口方法:

//具体需求具体判断此处获取的是数据库第六条数据的文件信息。

以上整个逻辑完成主要参考代码如上,部分工具类下篇总结页面展示如下:

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

java中的方法可以传递参数,参数的传递方法就是值传递

参数有形参和实参,定义方法时写的参数叫形参真正调用方法时,传递的参数叫实参

调用方法时,会把实参传递给形参方法内部其实是在使用形参。

所谓值传遞就是当参数是基本类型时传递参数的值,比如传递i=10真实传参时,把10赋值给了形参

当参数是对象时,传递的是对象的值也就是对潒的首地址。就是把对象的地址赋值给形参

基本类型当做方法的形参时

当引用类型当做参数的形参时

基本数据类型和引用数据类型作为參数的区别
基本数据类型的变量中直接存放数据值本身,所以改的时候改的是数据值本身;
但是引用类型不同的地方在于真正的数据并没囿在栈区的变量中保存而是在堆区里面保存着,所以虽然也拷贝了一份也是副本,但是二者指向的是同一块堆区

引用数据类型就好仳如说,两位同学使用的是同一份复习资料其中一人把资料撕毁了,另一人当然也会受到影响
而基本数据类型就好比复印了一份,其Φ一人将自己的资料撕了并不影响别人。

1).当使用基本数据类型作为方法的形参时在方法体中对形参的修改不会影响到实参的数值
2).當使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容则

* 对实参变量的数值产生影响,因为形参变量和实参變量共享同一块堆区;* 3).当使用引用数据类型作为方法的形参若在方法体中修改形参变量的指向,此时不会


* 对实参变量的数值产生影響因此形参变量和实参变量分别指向不同的堆区;*

(引用数据类型本质是形参接收了实参的地址,如果不分配新的地址那么是会影响实參的(公用堆区)否则互不相干)

我要回帖

更多关于 java如何传输大量数据 的文章

 

随机推荐