透明 发表于 2015-1-18 11:11:15

JAVA网页编程之用于MIDP的URLEncoder类

但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开encode  因为MIDP没有J2SE对应的java.net.URLEncoder类,因而,要向服务器发送HTTP哀求,必需本人举行URL编码,参考JDK1.4.2的src代码,将其改成一个能用在MIDP情况中的URLEncoder类:
//URLEncoder.java
packagecom.mboker.blog.midp.http;
importjava.io.*;
/**
*Encodeurl,justlikejava.net.URLEncoder.encode()inJ2SE.<br>
*NOTE:Thisclassismodifiedfromjava.net.URLEncoderclassinJ2SE1.4.
*
*@authorXuefeng
*/
classURLEncoder{
privatestaticfinalintMAX_BYTES_PER_CHAR=10;//ratherarbitrarylimit,butsafefornow
privatestaticboolean[]dontNeedEncoding;
privatestaticfinalintcaseDiff=(a-A);
static{
dontNeedEncoding=newboolean;
for(inti=a;i<=z;i++){
dontNeedEncoding=true;
}
for(inti=A;i<=Z;i++){
dontNeedEncoding=true;
}
for(inti=0;i<=9;i++){
dontNeedEncoding=true;
}
dontNeedEncoding[]=true;
dontNeedEncoding[-]=true;
dontNeedEncoding=true;
dontNeedEncoding[.]=true;
dontNeedEncoding[*]=true;
}
privateURLEncoder(){}
publicstaticStringencode(Strings){
booleanwroteUnencodedChar=false;
StringBufferout=newStringBuffer(s.length());
ByteArrayOutputStreambuf=newByteArrayOutputStream(MAX_BYTES_PER_CHAR);
OutputStreamWriterwriter=newOutputStreamWriter(buf);
for(inti=0;i<s.length();i++){
intc=(int)s.charAt(i);
if(c<256&&dontNeedEncoding){
out.append((char)(c==?+:c));
wroteUnencodedChar=true;
}else{
//converttoexternalencodingbeforehexconversion
try{
if(wroteUnencodedChar){//Fixfor4407610
writer=newOutputStreamWriter(buf);
wroteUnencodedChar=false;
}
writer.write(c);
/*
*IfthischaracterrepresentsthestartofaUnicode
*surrogatepair,thenpassintwocharacters.Itsnot
*clearwhatshouldbedoneifabytesreservedinthe
*surrogatepairsrangeoccursoutsideofalegalsurrogate
*pair.Fornow,justtreatitasifitwereanyother
*character.
*/
if(c>=0xD800&&c<=0xDBFF){
if((i+1)<s.length()){
intd=(int)s.charAt(i+1);
if(d>=0xDC00&&d<=0xDFFF){
writer.write(d);
i++;
}
}
}
writer.flush();
}catch(IOExceptione){
buf.reset();
continue;
}
byte[]ba=buf.toByteArray();
for(intj=0;j<ba.length;j++){
out.append(%);
charch=toHex((ba>>4)&0xF);
//convertingtouseuppercaseletteraspartof
//thehexvalueifchisaletter.
if(isLetter(ch)){
ch-=caseDiff;
}
out.append(ch);
ch=toHex(ba&0xF);
if(isLetter(ch)){
ch-=caseDiff;
}
out.append(ch);
}
buf.reset();
}
}
returnout.toString();
}
privatestaticchartoHex(intdigit){
if((digit>=16)||(digit<0)){
return;
}
if(digit<10){
return(char)(0+digit);
}
return(char)(a-10+digit);
}
privatestaticbooleanisLetter(charc){
return(c>=a&&c<=z);
}
}
  J2SE的URLEncoder依附于java.lang.Character的很多特征,将其全体剔除并改革为基础运算,便可在MIDP情况中利用,中文测试也统统一般。

IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。

变相怪杰 发表于 2015-1-20 11:13:00

关于设计模式的资料,还是向大家推荐banq的网站 http://www.ckuyun.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

因胸联盟 发表于 2015-1-29 06:55:28

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

只想知道 发表于 2015-2-5 22:20:58

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

小女巫 发表于 2015-2-6 16:09:28

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

精灵巫婆 发表于 2015-2-9 23:30:08

Java 编程语言的风格十分接近C、C++语言。

莫相离 发表于 2015-2-28 06:06:26

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

柔情似水 发表于 2015-3-17 01:11:12

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

愤怒的大鸟 发表于 2015-3-23 11:56:45

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
页: [1]
查看完整版本: JAVA网页编程之用于MIDP的URLEncoder类