Java分类的最新日记

字符串编码转换小结1

| | 评论(0)
 基础:

中文编码基础知识介绍(理论基础)

Java 编程技术中汉字问题的分析及解决

String.getBytes()方法中的中文编码问题 (这篇最为简单易懂且结合实际)

Unicode和UTF-8之间的转换详解

附录:

unicode编码表

GBK 汉字内码扩展规范编码表(二)

代码示例:

public String changeCharset(String str)
            throws UnsupportedEncodingException {
        if (str != null) {
           //得到gbk编码的字节串
             byte[] bs = str.getBytes("GBK");
             System.out.println("gbk:");          
             System.out.println("hex format is:"+encodeHex(bs));
          //得到utf8编码的字节串 
             byte[] ns = str.getBytes("UTF-8");
             System.out.println("utf8:");         
             System.out.println("hex format is:"+encodeHex(ns));
             System.out.println("Bin format is:"+encodeBin(ns)
                );
         //将编码为utf8的字节串再生成新的字符串,然后解码,看看转换过程中是否出错
             String newutf=new String(ns,"UTF-8");
             System.out.println("convert back from utf8:"+encodeHex(newutf.getBytes("UTF-8")));
             return newutf;
}

public static final String encodeHex (byte[] bytes)
    {
        StringBuffer buff =
        new StringBuffer(bytes.length * 2);
        String b;
        for (int i=0; i<bytes.length ; i++)
        {
            b = Integer.toHexString(bytes[i]); 
            // byte是两个字节的, 而上面的Integer.toHexString会把字节扩展为4个字节
            buff.append(b.length() > 2 ? b.substring(6,8) : b); 
            buff.append(" ");
        }
        return buff.toString();
    }
public static final String encodeBin (byte[] bytes)
    {
        StringBuffer buff =
        new StringBuffer(bytes.length * 2);
        String b;
        for (int i=0; i<bytes.length ; i++)
        {
            b = Integer.toBinaryString(bytes[i]); 
            // byte是两个字节的, 而上面的Integer.toHexString会把字节扩展为4个字节
            buff.append(b.substring(24,b.length())); 
            buff.append(" ");
        }
        return buff.toString();
    }

在Java中,String.getBytes("GBK")获得的是gbk编码的字节串,打印出来之后得到的是对应编码的十进制值,转换成16进制后就和编码表中的值一样了。
最后可以根据输出的二进制编码,和unicode表对比。

示例:
str: 中国
gbk:
hex format is:d6 d0 b9 fa
utf8:
hex format is:e4 b8 ad e5 9b bd
Bin format is:11100100 10111000 10101101 11100101 10011011 10111101
convert back from utf8:e4 b8 ad e5 9b bd
其中,“中”的unicode编码是4e2d,二进制表示为0100 1110 0010 1101,从低位到高位按六位截取及补齐高位后就可以得到11100100 10111000 1010110 ,即为utf8编码。


Java 线程一 基础 (转载)

| | 评论(2)
线程可以共享地址空间。
下面为java实现线程的两种方法,以及启动线程、停止线程、同步线程和线程间通信的Java实现方法。不涉及线程基本理论的讨论。
参考页面:
http://www.3lian.com/zl/2004/10-5/222237.html
http://www.itisedu.com/phrase/200603091754305.html
http://www.javafan.net/article/20040426165025144.html

Java线程要点:
http://www.jdon.com/concurrent/thread.htm
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=19439&tstart=0

Linux 下安装jdk

| | 评论(0)
第一步 ,下载jdk
地址:http://java.sun.com/javase/downloads/index.jsp
选择jdk5.0
第二步,安装
根据下载的不同,有两种安装方法。

如果是rpm.bin文件,则按照下面的方法:先将jdkxxx.bin拷贝到当前目录(/home/hd/java)下,然后执行下面的命令
#chmod a+x jdkxxxx.bin
#./jdkxxxx.bin
然后得到一个rpm文件,继续下面的执行
rpm -i --badreloc --relocate /usr/java=/home/hd/java jdk-1_5_0_10-linux-i586.rpm
执行完后,安装并配置环境变量。

如果直接下载bin的安装包,
则直接进行安装,然后配置环境变量

第三步,环境变量设置,
在终端中输入命令
   vi /etc/profile.d/java.sh
   这样可以在所有的用户中使用
   在新的java.sh中输入以下内容:
   #set java environment
   export JAVA_HOME=/home/hd/java/jdk1.5.0_10;/home/hd/class
   export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
   export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
  其中,/home/hd/class是即将运行class的位置。

测试页面连通

| | 评论(0)
测试一个页面的连接是否成功,可以通过连接的返回值来判断:

try {
            boolean fail=true;
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
           
            int a=conn.getResponseCode();
           
            if(a==200){
                fail=false;
            }else{
                fail=true;
            }
       

        } catch (IOException e) {
            fail=true;
           System.out.println("连接:" + urlString + "  时错误,Cause:" + e.getMessage());
        }

如果返回值不为200,则连接失败,如果不能建立连接也算失败。即不能连接到该页面。
使用了HttpURLConnection的 int getResponseCode()方法。(Gets the status code from an HTTP response message.)
 ***********
以下为PHP的实现方法:
1.安装pear
2.安装pear的类库:
HTTP_Client
3.修改php.ini文件中的include_path,设置include_path =".;C:\PHP\PEAR";
重启Apache
4.代码如下:
$url="http://210.34.4.20";
$client  = new HTTP_Client(array('allowRedirects' => false));
$client->head($url);
$res = $client->currentResponse();
echo $res['code'];
从而得到header的返回值,然后判断网页是否连通。

参考资料:
 HTTP 状态码表示什么意思?

利用Java API校验和解析XML

| | 评论(0)
前段时间因为使用到java进行xml的解析和校验,现在做一个小小的总结:

使用JDOM校验:


但是由于JDOM没有自己的解析器,它使用标准的解析器(如Xerces)来完成这个工作。如果想要进行schema校验必须确保选择了支持这个schema的解析器。
代码如下:
SAXBuilder builder =
  new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
builder.setFeature(
  "http://apache.org/xml/features/validation/schema", true);
builder.setProperty(
  "http://apache.org/xml/properties/schema/external-schemaLocation",
  "http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd" + " " +
  "http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd");
Document doc = builder.build(xml);

如果你想要使用JAXP来选择解析器,可以跳过指定类到SAXBuilder结构和用"org.apache.xerces.jaxp.SAXParserFactoryImpl"代替" javax.xml.parsers.SAXParserFactory"作为系统属性。这就告诉JAXP使用Xerces的 factory来创建解析器。可以用命令行来指定这个属性:
java -Djavax.xml.parsers.SAXParserFactory=
          org.apache.xerces.jaxp.SAXParserFactoryImpl

以上内容摘自http://www.jdom.org/docs/faq.html   How do I validate against a schema when using JDOM?

使用JAXP进行校验:


代码如下:
    // 1. Lookup a factory for the W3C XML Schema language
        SchemaFactory factory =
            SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
       
        // 2. Compile the schema.
        // Here the schema is loaded from a java.io.File, but you could use
        // a java.net.URL or a javax.xml.transform.Source instead.
        File schemaLocation = new File("/opt/xml/docbook/xsd/docbook.xsd");
        Schema schema = factory.newSchema(schemaLocation);
   
        // 3. Get a validator from the schema.
        Validator validator = schema.newValidator();
       
        // 4. Parse the document you want to check.
        Source source = new StreamSource(args[0]);
       
        // 5. Check the document
        try {
            validator.validate(source);
            System.out.println(args[0] + " is valid.");
        }
        catch (SAXException ex) {
            System.out.println(args[0] + " is not valid because ");
            System.out.println(ex.getMessage());
        } 

如果要使用xml自身指定的xsd进行校验,则使用下面的方法:
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema schema = factory.newSchema();
这种方法仅适用于 XSD。

参考文章:
 Java 语言的 XML 验证 API (www.ibm.com/developerworks/cn/xml/x-javaxmlvalidapi.html)
 JAXP 专述(www-128.ibm.com/developerworks/cn/xml/jaxp/)

用JAXP解析xml:
               DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
              DocumentBuilder parser = factory.newDocumentBuilder();
              org.w3c.dom.Document doc = parser.parse("temp.xml");
              //获得根节点元素
              Node record=doc.getFirstChild();


由于对xml没有系统的理解,以上仅为粗糙可用的代码,并不理解其中的原理,有待进一步学习。
具体代码见:http://210.34.4.9:8080/svn/SvnTest/datacheck1.0/

Java 优化编程阅读笔记二

| | 评论(0)

第二章内存管理
这章看得不太懂,觉得书上还是没有说明原理,等看到其它的再补充上来吧。


第三章表达式、语句和保留字

使用循环语句的几个建议:

Java 优化编程阅读笔记一

| | 评论(0)

Java优化编程

林胜利等编著,电子工业出版社

说明:仅记录自己以前不明白或觉得重要的东西。


第一章Java程序设计风格

 

关于此归档

这里是Java分类日记的归档。

下一个分类mysql

主索引归档页可以看到最新的日记和所有日记。

Powered by Movable Type 4.01