随笔-9  评论-15  文章-1  trackbacks-0
  2005年8月5日
、xml有哪些解析技术?区别是什么?

答:有DOM,SAX,STAX等

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

STAX:Streaming API for XML (StAX)

2、你在项目中用到了xml技术的哪些方面?如何实现的?

答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

3、用jdom解析xml文件时如何解决中文问题?如何解析?

答:看如下代码,用编码方式加以解决

package test;

import java.io.*;

public class DOMTest

{

private String inFile = "c:\people.xml";

private String outFile = "c:\people.xml";

public static void main(String args[])

{

new DOMTest();

}

public DOMTest()

{

try

{

javax.xml.parsers.DocumentBuilder builder =

javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();

org.w3c.dom.Document doc = builder.newDocument();

org.w3c.dom.Element root = doc.createElement("老师");

org.w3c.dom.Element wang = doc.createElement("王");

org.w3c.dom.Element liu = doc.createElement("刘");

wang.appendChild(doc.createTextNode("我是王老师"));

root.appendChild(wang);

doc.appendChild(root);

javax.xml.transform.Transformer transformer =

javax.xml.transform.TransformerFactory.newInstance().newTransformer();

transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312");

transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");





transformer.transform(new javax.xml.transform.dom.DOMSource(doc),

new



javax.xml.transform.stream.StreamResult(outFile));

}

catch (Exception e)

{

System.out.println (e.getMessage());

}

}

}
posted @ 2005-08-22 15:08 jam 阅读(1326) | 评论 (0)编辑 收藏
  String subString(String str, int i) {
    String strReturn 
= "";
    
if (str.equals(""|| str == null || i == 0{
      
return "";
    }

    
for (int j = 1; j <= str.length(); j++{
      String temp 
= "";
      temp 
= str.substring(0, j);
      
if (temp.getBytes().length >= i) {
        
if (temp.substring(j - 1, j).getBytes().length == 1{
          strReturn 
= temp;
        }

        
else {
          strReturn 
= str.substring(0, j - 1);
        }


        
break;
      }


    }


    
return strReturn;
  }


以上是java面试题:
“编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节数
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 ”
posted @ 2005-08-22 14:25 jam 阅读(6798) | 评论 (8)编辑 收藏
 1package test;
 2
 3public class BigInt {
 4  public static void main(String arg[]) {
 5    new BigInt();
 6  }

 7
 8  public BigInt() {
 9    String bigInt1 =
10        "12312311111111111111111111111111111111113132135135465464646546455545";
11    String bigInt2 =
12        "12312311111111111111111111111111111111113132135135465464646546455545";
13    int[] iArr1 = arr(bigInt1);
14    int[] iArr2 = arr(bigInt2);
15    int[] iArr3 = new int[iArr2.length];
16    int iTemp = 0;
17    String flag = "";
18    for (int i = 0; i < iArr1.length; i++{
19      if (flag.equals("add")) {
20        iTemp = iArr1[i] + iArr2[i] + 1; ;
21      }

22      else {
23        iTemp = iArr1[i] + iArr2[i];
24      }

25      flag = "";
26      if (iTemp > 9999{
27        iTemp = iTemp - 10000;
28        flag = "add";
29      }

30
31      iArr3[i] = iTemp;
32    }

33    String temp = "";
34    for (int i = 0; i < iArr3.length; i++{
35
36      if (iArr3[i] < 10{
37        temp =  "000" + String.valueOf(iArr3[i])+temp;
38
39      }

40      else if (iArr3[i] < 100{
41        temp = "00" + String.valueOf(iArr3[i])+temp;
42      }

43      else if (iArr3[i] < 1000{
44        temp = "0" + String.valueOf(iArr3[i])+temp;
45      }

46      else {
47        temp =  String.valueOf(iArr3[i])+temp;
48      }

49
50    }

51    System.out.println(temp);
52  }

53
54  int[] arr(String s) {
55    int j = s.length() / 4;
56
57    int[] ArrOne = new int[j + 1];
58    int iLength;
59    iLength = s.length();
60
61    for (int i = 0; i < j; i++)
62
63    {
64
65      ArrOne[i] = Integer.parseInt(s.substring(iLength - 4 * (i + 1),
66                                               iLength - 4 * i));
67
68    }

69
70    return ArrOne;
71
72  }

73}

74
posted @ 2005-08-22 12:31 jam 阅读(556) | 评论 (0)编辑 收藏
在工作中碰到ip地址检查的问题,因此自己写了一个checkIPAdress方法。
 1/**
 2   * check input is ip or not.
 3   * @return a strResult.1 is not ip adress,0 is ipadress
 4   */

 5
 6  private String checkIPAdress(String input) {
 7
 8    String strResult = "0";
 9    //identify the length of the string
10    if (input.length() < 7 || input.length() > 15{
11      return "1";
12    }

13
14    int startIndex = 0;
15    Vector v = new Vector();
16    int index = 0;
17    startIndex = input.indexOf(".");
18    while (startIndex < input.length() && startIndex != -1{
19      String temp = input.substring(index, startIndex);
20      v.addElement(temp);
21      index = startIndex + 1;
22      startIndex = input.indexOf(".", startIndex + 1);
23    }

24    v.addElement(input.substring(index));
25    if (v.size() != 4{
26      return "1";
27    }

28    for (int i = 0; i < v.size(); i++{
29      try {
30        int iTemp = Integer.parseInt( (String) v.elementAt(i));
31
32        if (iTemp < 0 || iTemp > 254{
33
34          return "1";
35        }

36
37      }

38      catch (Exception e) {
39        e.printStackTrace();
40        return "1";
41      }

42
43    }

44
45    return strResult;
46
47  }
     起始在判断分割ip地址应该使用split方法。但是因为我系统中用的是jdk1.2所以采用这个笨方法,如果觉得不爽可以改成split,更方便。
posted @ 2005-08-11 12:50 jam 阅读(466) | 评论 (0)编辑 收藏
     摘要: EJB 1.EJB体系结构:      包括客户端、服务器端。      客户端:包含了调用EJB组件特定业务所需的EJB接口(包括本地和远程EJB接口);服务器端处理对象的句柄。      服务器端:包含了EJB组件实现的实例;用来在客户端...  阅读全文
posted @ 2005-08-05 09:25 jam 阅读(2223) | 评论 (1)编辑 收藏