Code Bye

java网络通信遇到的一些问题:文件传输、序列化等等

最近要用java写个服务器,初步设想传输一下几种类型:
1、字符串, 2、文件, 3、数据类型(数据库结构,可能只能用arrlist传输),4、对象
问题一:以前穿文件的时候,习惯性用以下代码:
import java.io.*;
import java.net.*;
 
public class FileServer{
       public static void main(String[] args)throws Exception{
              //创建文件流用来读取文件中的数据
              File file=new File("C:\Users\admin\Desktop\navicat112_mysql_en_x64.exe");
              FileInputStream fis=new FileInputStream(file);
             
              //创建网络服务器接受客户请求
              ServerSocket ss=new ServerSocket(8888);
              Socket client=ss.accept();
             
              //创建网络输出流并提供数据包装器
              DataOutputStream dos=new DataOutputStream(client.getOutputStream());
             
              //创建文件读取缓冲区
              byte[] buf=new byte[2048];
              int num;
              while((num=fis.read(buf))!=-1){//能否读完文件
                  dos.write(buf,0,num);//把文件数据写出网络缓冲区
                  dos.flush();//刷新缓冲区把数据写往客户端
              }
              fis.close();
              dos.close();
       }
}
import java.io.*;
import java.net.*;
 
public class FileClient{
       public static void main(String[] args)throws Exception{
              //使用本地文件系统接受网络数据并存为新文件
              File file=new File("D:\temp.exe");
              file.createNewFile();
              RandomAccessFile raf=new RandomAccessFile(file,"rw");
             
              // 通过Socket连接文件服务器
              Socket server=new Socket("127.0.0.1",8888);
             
              //创建网络接受流接受服务器文件数据
              DataInputStream in=new DataInputStream(server.getInputStream());
             
              //创建缓冲区缓冲网络数据
              byte[] buf=new byte[2048];
              int num;
             
              while((num=in.read(buf))!=-1){//能否读完全部数据
                     raf.write(buf,0,num);//将数据写往文件
                     raf.skipBytes(num);//顺序写文件字节
                     //num=in.read(buf);//继续从网络中读取文件
              }
              in.close();
              raf.close();
       }
}

发现假如把DataInputStream 用close()关闭后,scoket也会关闭,但是不关闭有些文件,例如x.exe又传输不完(大部分文本文件是可以的),所以就考虑新用一个端口,再起一个socket单单负责传输文件,但是这样好像有弊端..请各位大神指点。
2、数据集问题,深受.net C#影响…上来想直接序列化resultset…才发现本人太年轻了,有关数据传输这方面怎么传输,还得讨教一下大家,谢谢!

解决方案

40

Java里只有对象,没有结构,可以把对象或ArrayList拼接成JSON格式的字符串然后传输。
文件传输你可以去了解下Apache的fileupload相关的类库。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java网络通信遇到的一些问题:文件传输、序列化等等