今日内容
1. Properties
Properties
表示一组持久的属性
属性列表中的每个键及其对应的值都是一个字符串
继承Hashtable---->实现Map接口---->存储数据,取出数据----都可以使用Map的方式
构造方法
public Properties()
---创建空的属性列表
遍历方式---底层基于Map实现的
添加元素
public Object setProperty(String key, String value)
遍历属性列表
public Set<String> stringPropertyNames()
---获取属性列表中的所有的键
public String getProperty(String key)
---使用此属性列表中指定的键搜索属性
public void load(Reader reader)throws IOException :
将指定文件中的内容加载属性集合列表中(内容键值对 key=value)
void store(Writer writer, String comments)
---将属性列表中的内容保存指定文件中(以"键=值"元素对进行保存)
--第一个参数:字符输出/使用字节输出流
--第二个参数:属性列表的描述
import java.util.Properties;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
//public Properties():创建空的属性列表
Properties prop = new Properties() ;
//使用Map的方式添加数据
prop.put("钟离","35") ;
prop.put("胡桃","30") ;
System.out.println(prop);
//遍历
Set<String> keySet = prop.stringPropertyNames();
for(String key:keySet){
String value = prop.getProperty(key);
System.out.println(key+"="+value);
}
}
}
2. InetAddress
InetAddress
代表互联网ip地址对象
获取计算机的主机名称或者获取计算机的ip地址字符串形式
public static InetAddress getByName(String host)throws UnknownHostException
通过计算机主机名称或者是字符串形式的ip地址--->获取互联网ip地址对象
public class Test {
public static void main(String[] args) throws UnknownHostException {
//还可以指定ip地址字符串
InetAddress inetAddress = InetAddress.getByName("DESKTOP-Q9I6MIA");
System.out.println(inetAddress);//DESKTOP-Q9I6MIA/192.168.11.173
//getHostName--获得主机名称
String hostName = inetAddress.getHostName() ;
System.out.println(hostName);//DESKTOP-Q9I6MIA
//getahaostAddress--获得主机IP地址
String ip = inetAddress.getHostAddress();
System.out.println(ip);//192.168.11.173
}
}
3. UDP
UDP
不安全,效率高,不建立连接通道,传输数据有大小限制
UDP发送端实现
1)创建发送端的端口
DatagramSocket
--这个类表示发送和输入端数据的套接字--就是创建发送和输入端的"暗号"--端口号
public DatagramSocket()
2)创建数据
DatagtamPacket
--这个类表示封装存储的数据的数据包
public DatagramPacket(byte[] byte, int length, InetAddress address, int port)
--参数注释
byte[] byte--发送数据转换成字节数组发送--发送的内容
int length--发送数据的长度--字节数组的长度
InetAddress address--发送端的IP地址
int port--接收端的端口号!
3)发送端将数据包存储在数据包中
DatagramPacket 名 = new DatagramPacket(数据参数) ;
4)发送
public void send(数据包) ;
5)释放资源
close()
注意
传输时,先启动接收端,在使用发送端!
import java.io.IOException;
import java.net.*;
//UDP发送端
public class Test {
public static void main(String[] args) throws IOException {
//创建端口
DatagramSocket ds = new DatagramSocket();
//创建数据
byte[] bytes = "我是被包起来发送的数据".getBytes();//将数据转换为字节数组
int length = bytes.length ;//数据长度--字节数组长度
//获取本机地址,127.0.0.1本机回环地址
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 666 ; //接收端的端口号!
//将数据包起来
DatagramPacket dp = new DatagramPacket(bytes,length,address,port);//将数据包起来
//发送数据包
ds.send(dp);//通过端口ds发送数据包dp
//释放资源
ds.close();
}
}
UDP接收端实现
1)创建接收端端口,并创建端口号
DatagramSocket
DatagramSocket 名 = new DatagramSocket(端口号) ;
2)创建接受容器
--创建一个接收数据的包
DatagramPacket
3)接收数据
用上面的接收包来接收
public void receive(数据包)
4)从接收的包中解析包中的内容
分段接收数据
public byte[] getData()
获取数据实际长度
public int getLength()
展示数据
将字节数组转换为字符串
String str = new String(byte[] bytes , 从什么位置开始接收 , int length)
5)释放资源
close()
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//UDP接收端
public class Test_Receive {
public static void main(String[] args) throws IOException {
//创建接收端--并创建端口号!--这里端口号和发送端发送的端口号要一致!
DatagramSocket ds = new DatagramSocket(666);
//创建接受数据的数据包--缓冲
byte[] bytes = new byte[1024] ;//用来当作缓冲数据包的大小--1024或者1024的倍数--可以理解为每秒接收的速度!
int length = bytes.length;//理想数据长度
DatagramPacket dp = new DatagramPacket(bytes,length);//接收端,不需要其他的
//接收数据--接收端ds接收缓冲数据包dp的内容
ds.receive(dp);
//获取包中数据
byte[] bytes1 = dp.getData();//获取内容
//获取实际内容长度
int length1 = dp.getLength() ;
//展示数据--利用字节数组转换为字符串
String message = new String(bytes1,0,length1);//从数组bytes1中的零角标获取length1长的数据
//获取发送端IP
String ip = dp.getAddress().getHostAddress();
System.out.println("发送端的IP是"+ip+" "+"发送内容是:"+message);//发送端的IP是127.0.0.1 发送内容是:我是被包起来发送的数据
//释放资源
ds.close();
}
}