×

javaunicode unicode java

java处理unicode字符?java 中怎么使用UDP

admin admin 发表于2022-06-28 06:44:10 浏览115 评论0

抢沙发发表评论

java处理unicode字符


unicode编码简而言之就是将每一个字符用16位2进制数标识。但是通常都用4位的16进制数标识。
例如:
1)中文字符串“你好“的unicode码为:\u60\u597d;
2)英文字符串“ab“的unicode码为:\u0061\u0062;
其中\u是标识unicode码用的,后面的4位16进制数则是对应字符的unicode码。

unicode码在J2EE项目中应用广泛,java对unicode码提供了很好的支持。例如国际化,则是unicode的经典运用。
那么unicode的编码规则具体是什么,如何用程序实现?

1、unicode编码规则

unicode码对每一个字符用4位16进制数表示。具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,
如果转化的16进制数的长度不足2位,则在其后补0,然后将高、低8位转成的16进制字符串拼接起来并在前面补上“\u“ 即可。

2、转码程序

1)字符串转unicode

/**
* 将字符串转成unicode
* @param str 待转字符串
* @return unicode字符串
*/
public String convert(String str)
{
str = (str == null ? ““ : str);
String tmp;
StringBuffer sb = new StringBuffer(1000);
char c;
int i, j;
sb.setLength(0);
for (i = 0; i 《 str.length(); i++)
{
c = str.charAt(i);
sb.append(“\\u“);
j = (c 》》》8); //取出高8位
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append(“0“);
sb.append(tmp);
j = (c & 0xFF); //取出低8位
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append(“0“);
sb.append(tmp);

}
return (new String(sb));
}

2)unicode转成字符串,与上述过程反向操作即可
/**
* 将unicode 字符串
* @param str 待转字符串
* @return 普通字符串
*/
public String revert(String str)
{
str = (str == null ? ““ : str);
if (str.indexOf(“\\u“) == -1)//如果不是unicode码则原样返回
return str;

StringBuffer sb = new StringBuffer(1000);

for (int i = 0; i 《 str.length() - 6;)
{
String strTemp = str.substring(i, i + 6);
String value = strTemp.substring(2);
int c = 0;
for (int j = 0; j 《 value.length(); j++)
{
char tempChar = value.charAt(j);
int t = 0;
switch (tempChar)
{
case ’a’:
t = 10;
break;
case ’b’:
t = 11;
break;
case ’c’:
t = 12;
break;
case ’d’:
t = 13;
break;
case ’e’:
t = 14;
break;
case ’f’:
t = 15;
break;
default:
t = tempChar - 48;
break;
}

c += t * ((int) Math.pow(16, (value.length() - j - 1)));
}
sb.append((char) c);
i = i + 6;
}
return sb.toString();
}

java 中怎么使用UDP


发送步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。

将数据打包到DatagramPacket中去

通过socket服务发送 (send()方法)

关闭资源

import java.io.IOException;  
import java.net.*;  
  
public class Send {  
  
    public static void main(String args)  {  
          
        DatagramSocket ds = null;  //建立套间字udpsocket服务  
          
        try {  
          ds = new DatagramSocket(8999);  //实例化套间字,指定自己的port  
        } catch (SocketException e) {  
            System.out.println(“Cannot open port!“);  
            System.exit(1);   
        }  
          
        byte buf= “Hello, I am sender!“.getBytes();  //数据  
        InetAddress destination = null ;  
        try {  
            destination = InetAddress.getByName(“192.168.1.5“);  //需要发送的地址  
        } catch (UnknownHostException e) {  
            System.out.println(“Cannot open findhost!“);  
            System.exit(1);   
        }  
        DatagramPacket dp =   
                new DatagramPacket(buf, buf.length, destination , 10000);    
        //打包到DatagramPacket类型中(DatagramSocket的send()方法接受此类,注意10000是接受地址的端口,不同于自己的端口!)  
          
        try {  
            ds.send(dp);  //发送数据  
        } catch (IOException e) {  
        }  
        ds.close();  
    }  
}

接收步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。

定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容

通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中

使用DatagramPacket的方法,提取数据。

关闭资源。

import java.net.*;  
  
public class Rec {  
  
    public static void main(String args) throws Exception {  
          
        DatagramSocket ds = new DatagramSocket(10000);  //定义服务,监视端口上面的发送端口,注意不是send本身端口  
          
        byte buf = new byte;//接受内容的大小,注意不要溢出  
          
        DatagramPacket dp = new DatagramPacket(buf,0,buf.length);//定义一个接收的包  
          
        ds.receive(dp);//将接受内容封装到包中  
          
        String data = new String(dp.getData(), 0, dp.getLength());//利用getData()方法取出内容  
          
        System.out.println(data);//打印内容  
          
        ds.close();//关闭资源     
    }  
}

java中的system.currenttimemillis()是什么东西


System.currentTimeMillis() 获得的是自1970-1-01 00:00:00.000 到当前时刻的时间距离,类型为long