在服务器和客户端套接字之间传输XML数据的最佳方法

时间:2013-12-08 05:52:56

标签: java xml sockets

服务器端:

PrintWriter outputStream = new PrintWriter(client.getOutputStream(),true);
BufferedReader inputStream = new BufferedReader(newInputStreamReader(client.getInputStream()));
outputStream.println("hello client");
System.out.println("server got: " + inputStream.readLine());
outputStream.println("to the client");

客户端:

try{
    serverSocket = new Socket("machineName", 4444);
    out = new PrintWriter(serverSocket.getOutputStream(), true);
    in = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
}
catch(Exception e){
    e.printStackTrace();
}

if ((fromServer = in.readLine()) != null) {
    System.out.println("Server: " + fromServer);
    fromUser = "I am the user";
    out.println(fromUser);
    System.out.println("Server: " + in.readLine());
}

我使用这种格式在服务器和客户端套接字之间进行通信。现在我想在客户端和服务器之间发送XML而不是字符串。我使用DOM来解析服务器端和客户端的XML数据。

   

是否有一种在客户端和服务器之间传输XML的有效方法,而不是将XML转换为字符串并删除换行符(因为readLine一次读取一行,XML开始标记和结束标记不会出现在XML中的单行中格式)来自XML数据并通过Printwriter将其发送到客户端。

谢谢

P.S:这不是一个家庭作业问题。我正在学习Java套接字进行访谈。

3 个答案:

答案 0 :(得分:0)

了解StAX api。它旨在通过Internet传输XML数据。

  

Streaming是指XML信息集所在的编程模型   在应用程序运行时串行传输和解析,通常是真实的   时间,往往来自内容不精确的动态来源   事先知道。
  [...]
  用于XML处理的流模型在您的时候特别有用   应用程序具有严格的内存限制,就像手机运行一样   Java平台,Micro Edition(Java ME平台),或者当你的   应用程序需要同时处理多个请求,如同   应用程序服务器。

文档中的更多信息:http://docs.oracle.com/javase/tutorial/jaxp/stax/why.html

答案 1 :(得分:0)

您可以使用Exificient

将XML转换为压缩二进制数据
  

EXI格式是可扩展标记语言(XML)信息集的一种非常紧凑的表示,旨在同时优化性能和计算资源的利用。

答案 2 :(得分:0)

实际上,XML数据只不过是字符串(但您也可以将其视为二进制)。你的问题是发送许多行的xml字符串。如果您不想使用第三方库,只需手动操作,这是一个好的开始:https://stackoverflow.com/a/2441736/719212
本例使用byte stream通过解析xml来发送和接收xml数据。