由于MIDP没有J2SE对应的java.net.URLEncoder类,因此,要向服务器发送HTTP请求,必须自己进行URL编码,参考JDK1.4.2的src代码,将其改为一个能用在MIDP环境中的URLEncoder类:
// URLEncoder.java
package com.mboker.blog.midp.http;
import java.io.*;
/**
* Encode url, just like java.net.URLEncoder.encode() in J2SE.<br>
* NOTE: This class is modified from java.net.URLEncoder class in J2SE 1.4.
*
* @author Xuefeng
*/
class URLEncoder {
private static final int MAX_BYTES_PER_CHAR = 10; // rather arbitrary limit, but safe for now
private static boolean[] dontNeedEncoding;
private static final int caseDiff = ('a' - 'A');
static {
dontNeedEncoding = new boolean[256];
for (int i='a'; i<='z'; i++) {
dontNeedEncoding[i] = true;
}
for (int i='A'; i<='Z'; i++) {
dontNeedEncoding[i] = true;
}
for (int i='0'; i<='9'; i++) {
dontNeedEncoding[i] = true;
}
dontNeedEncoding[' '] = true;
dontNeedEncoding['-'] = true;
dontNeedEncoding['_'] = true;
dontNeedEncoding['.'] = true;
dontNeedEncoding['*'] = true;
}
private URLEncoder() {}
public static String encode(String s) {
boolean wroteUnencodedChar = false;
StringBuffer out = new StringBuffer(s.length());
ByteArrayOutputStream buf = new ByteArrayOutputStream(MAX_BYTES_PER_CHAR);
OutputStreamWriter writer = new OutputStreamWriter(buf);