Java学习笔记(3)网络通信
2017-08-25 13:45
274 查看
1、Java中的XML操作
有关XML的简介请点击:XML学习笔记。
使用Dom4j操作XML数据:
首先在https://dom4j.github.io/点击下在dom4j-1.6.1 java库。导入到java工程中调用。package java网络通信; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.xml.sax.DocumentHandler; public class Dom4j创建xml { public static void main(String[] args) { String xmlString = "<root><people>cao</people></root>"; try { Document document = DocumentHelper.parseText(xmlString); System.out.println(document.asXML()); } catch (DocumentException e) { e.printStackTrace(); } } }
程序执行结果:
<?xml version="1.0" encoding="UTF-8"?> <root><people>cao</people></root>
在Java中创建xml数据:
package java网络通信; import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.events.DocumentEvent; public class 创建xml文件 { public static void main(String[] args) { //Java中常用的通过DOM方式生成xml文档 try { //创建xml文件 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); //创建根元素root org.w3c.dom.Element root = document.createElement("Languages"); //创建第一组元素 root.setAttribute("cat", "it");//为根元素添加属性 org.w3c.dom.Element lan1 = document.createElement("lan"); lan1.setAttribute("id", "1"); org.w3c.dom.Element name1 = document.createElement("name"); name1.setTextContent("Java"); org.w3c.dom.Element ide1 = document.createElement("ide"); ide1.setTextContent("eclipse"); lan1.appendChild(name1); //把<name>标签添加到<lan>里。作为子节点 lan1.appendChild(ide1); //创建第二组元素 org.w3c.dom.Element lan2 = document.createElement("lan"); lan2.setAttribute("id", "2"); org.w3c.dom.Element name2 = document.createElement("name"); name2.setTextContent("Swift"); org.w3c.dom.Element ide2 = document.createElement("ide"); ide2.setTextContent("Xcode"); lan2.appendChild(name2); lan2.appendChild(ide2); //创建第三组元素 org.w3c.dom.Element lan3 = document.createElement("lan"); lan3.setAttribute("id", "1"); org.w3c.dom.Element name3 = document.createElement("name"); name3.setTextContent("C#"); org.w3c.dom.Element ide3 = document.createElement("ide"); ide3.setTextContent("Visual Studio"); lan3.appendChild(name3); lan3.appendChild(ide3); //最后用根元素包围所有元素 root.appendChild(lan1); root.appendChild(lan2); root.appendChild(lan3); document.appendChild(root); //xml文件的输出 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); StringWriter writer = new StringWriter(); //定义存放数据的变量writer //以输入字符串的方式输出文本 transformer.transform(new DOMSource(document), new StreamResult(writer)); System.out.println(writer); //输出xml文件 transformer.transform(new DOMSource(document),new StreamResult(new File("xml文件"))); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } }
输出的xml文本内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Languages cat="it"> <lan id="1" <name>Java</name> <ide>eclipse</ide> </lan> <lan id="2"> <name>Swift</name> <ide>Xcode</ide> </lan><lan id="1"> <name>C#</name> <ide>Visual Studio</ide> </lan> </Languages>
2、Java中的JSON操作:
有关JSON的简介请点击:JSON学习笔记。
在Java中创建JSON文件:
首先可以在http://vdisk.weibo.com/s/9emUo下载google-gson-2.2.4 Java库,然后导入到Java工程中调用。package java网络通信; import com.google.gson.JsonArray; import com.google.gson.JsonObject; public class 创建JSON文件 { public static void main(String[] args) { //创建一个目标文件 JsonObject object = new JsonObject(); object.addProperty("cat", "it");//添加目标属性 //创建JOSN数组 JsonArray array = new JsonArray(); //创建第一个数组元素 JsonObject lan1 = new JsonObject(); lan1.addProperty("id", 1); lan1.addProperty("name", "Java"); lan1.addProperty("ide", "Eclipse"); array.add(lan1); //创建第一个数组元素 JsonObject lan2 = new JsonObject(); lan2.addProperty("id", 2); lan2.addProperty("name", "Swift"); lan2.addProperty("ide", "Xcode"); array.add(lan2); //创建第一个数组元素 JsonObject lan3 = new JsonObject(); lan3.addProperty("id", 3); lan3.addProperty("name", "C#"); lan3.addProperty("ide", "Visual Studio"); array.add(lan3); //包装数组 object.add("languages", array); object.addProperty("pop", true); //输出josn文本 System.out.println(object.toString()); } }
输出的JSON文本:
{ "cat":"it", "languages":[ {"id":1,"name":"Java","ide":"Eclipse"}, {"id":2,"name":"Swift","ide":"Xcode"}, {"id":3,"name":"C#","ide":"Visual Studio"} ], "pop":true }
在Java中读取JSON文本:
通过Java读取上面输出的文本文件:package java网络通信; import java.io.FileNotFoundException; import java.io.FileReader; import com.google.gson.JsonArray; import com.google.gson.JsonIOException; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; public class 读取JSON文本 { public static void main(String[] args) { try { //创建JSON解析器,用于解析json文档 JsonParser parser = new JsonParser(); JsonObject object = (JsonObject) parser.parse(new FileReader("json.json")); System.out.println("cat="+ object.get("cat").getAsString()); System.out.println("pop="+ object.get("pop").getAsBoolean()); JsonArray array = object.get("languages").getAsJsonArray(); for (int i = 0; i < array.size(); i++) { System.out.println("-------------"); JsonObject subObject = array.get(i).getAsJsonObject(); System.out.println("id=" + subObject.get("id").getAsInt()); System.out.println("name=" + subObject.get("name").getAsString()); System.out.println("ide=" + subObject.get("ide").getAsString()); } } catch (JsonIOException e) { e.printStackTrace(); } catch (JsonSyntaxException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
程序运行结果:
cat=it pop=true ------------- id=1 name=Java ide=Eclipse ------------- id=2 name=Swift ide=Xcode ------------- id=3 name=C# ide=Visual Studio
3、Java中的HTTP通信
使用 Http 的 Get 方式读取网络数据:
package java网络通信; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import org.omg.CORBA.portable.InputStream; import java基础.stringBuffer; public class 读取网络数据 { public static void main(String[] args) { try { //获取百度首页信息 URL url = new URL("https://www.baidu.com/"); URLConnection connection = url.openConnection(); //把获取的信息转换位输入流 java.io.InputStream is = connection.getInputStream(); //读取输入流,并指定编码格式为“UTF-8” InputStreamReader isr = new InputStreamReader(is,"UTF-8"); //读取数据缓存区 BufferedReader br = new BufferedReader(isr); String line;//定义数据存放位置 StringBuilder builder = new StringBuilder(); while ((line = br.readLine())!= null) { builder.append(line); } br.close(); isr.close(); is.close(); //打印数据 System.out.println(builder.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
使用HttpClient进行Get方式通信:
先从http://hc.apache.org/downloads.cgi下载httpcomponents库,导入到java工程中使用。package java网络通信; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class 使用HttpClient进行Get方式通信 { public static void main(String[] args) { new Get().start(); } } class Get extends Thread{ HttpClient client = HttpClients.createDefault(); public void run() { HttpGet get = new HttpGet("http://www.baidu.com"); try { HttpResponse response = client.execute(get); HttpEntity entity = response.getEntity();//实用工具 String string = EntityUtils.toString(entity,"UTF-8"); System.out.println(string); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
4、Java中的Socket通信
Socket介绍:
Socket又称为“套接字”,英语程序通常通过“套接字”向网络发出请求或者应答网络请求。对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。
对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。
Socket链接的建立过程:
服务器监听。客户端发出请求。
建立链接。
通信。
Socket特点:
Socket基于TCP链接,数据传输有保障。Socket适用于建立长时间链接。
Socket编程通常用于即时通信。
有关Socket的更多介绍请点击:基础socket—简单聊天室的实现。
ServerSocket的建立与使用:
package java网络通信; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class ServerSocket的创建与使用 { public static void main(String[] args) { try { //端口范围1-65535 ServerSocket serverSocket = new ServerSocket(12345); //block,监听本地12345端口 Socket socket = serverSocket.accept(); //建立连接 JOptionPane.showMessageDialog(null, "有客户端链接到本地的12345端口"); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Java学习笔记(3)网络通信
- Java学习笔记04——Java网络通信
- java学习笔记(11)--网络通信
- 网络通信学习笔记-Java
- Java学习笔记(3)网络通信
- Java网络编程学习笔记(4)非阻塞通信
- Java学习笔记(3)网络通信
- Java学习笔记(3)网络通信
- Java学习笔记(3)网络通信
- java学习笔记---Socket应用网络通信
- Java学习笔记(3)网络通信
- java学习笔记-网络编程
- java网络编程学习笔记
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- java学习小笔记(三.socket通信)
- Java网络编程---I/O部分学习笔记整理
- Java与Flex学习笔记(5)----Flex与Java通信之HttpService方式
- java学习之路——基于TCP的Socket网络通信实例
- Java学习笔记之网络编程基础-通过URL获取网络图片
- 黑马程序员学习笔记之六(java网络编程)