第一篇:Java中文&編碼問題小結(jié)
2006-03-07 | Java中文&編碼問題小結(jié)
Java字符編碼轉(zhuǎn)換過程說明
常見問題 JVM JVM啟動后,JVM會設置一些系統(tǒng)屬性以表明JVM的缺省區(qū)域。user.language,user.region,file.encoding等??梢允褂?System.getProperties()詳細查看所有的系統(tǒng)屬性。
如在英文操作系統(tǒng)(如UNIX)下,可以使用如下屬性定義強制指定JVM為中文環(huán)境
-Dclient.encoding.override=GBK-Dfile.encoding=GBK-Duser.language=zh-Duser.region=CN
.javaà.class編譯
說明:一般javac根據(jù)當前os區(qū)域設置,自動決定源文件的編碼.可以通過-encoding強制指定.錯誤可能: 1 gbk編碼源文件在英文環(huán)境下編譯,javac不能正確轉(zhuǎn)換.曾見于java/jsp在英文 unix下.檢測方法:寫u4e00格式的漢字,繞開javac編碼,再在jvm中,將漢字作為 int打印,看值是否相等;或直接以UTF-8編碼打開.class文件,看看常量字符串
是否正確保存漢字。
文件讀寫
外部數(shù)據(jù)如文件經(jīng)過讀寫和轉(zhuǎn)換兩個步驟,轉(zhuǎn)為jvm所使用字符。
InputStream/OutputStream用于讀寫原始外部數(shù)據(jù),Reader/Writer執(zhí)行讀寫和轉(zhuǎn)
換兩個步驟。文件讀寫轉(zhuǎn)換由java.io.Reader/Writer執(zhí)行;輸入輸出流
InputStream/OutputStream 處理漢字不合適,應該首選使用Reader/Writer,如 FileReader/FileWriter。
2`FileReader/FileWriter使用JVM當前編碼讀寫文件.如果有其它編碼格式,使用
InputStreamReader/OutputStreamWriter PrintStream有點特殊,它自動使用jvm缺省編碼進行轉(zhuǎn)換。
讀取.properties文件
.propeties文件由Properties類以iso8859-1編碼讀取,因此不能在其中直接寫漢
字,需要使用JDK 的native2ascii工具轉(zhuǎn)換漢字為uXXXX格式。命令行:
native2ascii –encoding GBK inputfile outputfile
讀取XML文件 XML文件讀寫同于文件讀寫,但應注意確保XML頭中聲明如 xml version=” 1.0” encoding=”gb2312” ?>與文件編碼保持一致。javax.xml.SAXParser類接受InputStream作為輸入?yún)?shù),對于Reader,需要用 org.xml.sax.InputSource包裝一下,再給SAXParser。對于UTF-8編碼 XML,注意防止編輯器自動加上uFFFE BOM頭, xml parser會報
告content is not allowed in prolog。
字節(jié)數(shù)組 使用 new String(byteArray,encoding)和 String.getBytes(encoding)在
字節(jié)數(shù)組和字符串之間進行轉(zhuǎn)換
也可以用ByteArrayInputStream/ByteArrayOutputStream轉(zhuǎn)為流后再用 InputStreamReader/OutputStreamWriter轉(zhuǎn)換。
錯誤編碼的字符串(iso8859-1轉(zhuǎn)碼gbk)如果我們得到的字符串是由錯誤的轉(zhuǎn)碼方式產(chǎn)生的,例如:對于gbk中文,由
iso8859-1方式轉(zhuǎn)換,此時如果用調(diào)試器看到的字符串一般是 的樣子,長度一般
為文本的字節(jié)長度,而非漢字個數(shù)。
可以采用如下方式轉(zhuǎn)為正確的中文:
text = new String(text.getBytes(“iso8859-1”),”gbk”);
JDBC 轉(zhuǎn)換過程由JDBC Driver執(zhí)行,取決于各JDBC數(shù)據(jù)庫實現(xiàn)。對此經(jīng)驗尚積累不夠。對于ORACLE數(shù)據(jù)庫,需要數(shù)據(jù)庫創(chuàng)建時指定編碼方式為gbk,否則會出現(xiàn)漢字轉(zhuǎn)
碼錯誤 對于 SQL Server 2000,最好以nvarchar/nchar類型存放文本,即不存在中文 /編碼轉(zhuǎn)換問題。連接 Mysql,將 connectionString 設置成 encoding 為 gb2312:
String connectionString = “jdbc:mysql://localhost/test? useUnicode=true&characterEncoding=gb2312”;
WEB/Servlet/JSP 1 對于JSP,確定頭部加上 <%@ page
contentType=“text/html;charset=gb2312”%>這樣的標簽。對于Servlet,確定 設置setContentType(“text/html;charset=gb2312”),以上兩條用于使得輸出漢字沒有問題。為輸出HTML head中加一個 ,讓瀏覽器正確確定HTML編碼。為Web應用加一個Filter,確保每個Request明確調(diào)用setCharacterEncoding方
法,讓輸入漢字能夠正確解析。
import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.UnavailableException;import javax.servlet.http.HttpServletRequest;/** * Example filter that sets the character encoding to be used in parsing the * incoming request */ public class SetCharacterEncodingFilter implements Filter { public SetCharacterEncodingFilter(){} protected boolean debug = false;protected String encoding = null;protected FilterConfig filterConfig = null;public void destroy(){ this.encoding = null;this.filterConfig = null;}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException { // if(request.getCharacterEncoding()== null)// { // String encoding = getEncoding();// if(encoding!= null)// request.setCharacterEncoding(encoding);// // } request.setCharacterEncoding(encoding);if(debug){ System.out.println(((HttpServletRequest)request).getRequestURI()+“setted to ”+encoding);} chain.doFilter(request, response);}
public void init(FilterConfig filterConfig)throws ServletException { this.filterConfig = filterConfig;this.encoding = filterConfig.getInitParameter(“encoding”);this.debug = “true”.equalsIgnoreCase(filterConfig.getInitParameter(“debug”));}
protected String getEncoding(){ return(this.encoding);} }
web.xml中加入:
encoding gb2312 debug false
其一:在web.xml里加上如下腳本: weblogic.httpd.inputCharset./* GBK
SWING/AWT/SWT 對于SWING/AWT,Java會有些缺省字體如Dialog/San Serif,這些字體到系統(tǒng)真實
字體的映射在$JRE_HOME/lib/font.properties.XXX文件中指定。排除字體顯示問
題時,首先需要確定JVM的區(qū)域為zh_CN,這樣font.properties.zh_CN文件才會發(fā)
生作用。對于 font.properties.zh_CN , 需要檢查是否映射缺省字體到中文字體
如宋體。
在Swing中,Java自行解釋TTF字體,渲染顯示;對于AWT,SWT顯示部分交由操作系
統(tǒng)。首先需要確定系統(tǒng)裝有中文字體。漢字顯示為”□”,一般為顯示字體沒有使用中文字體,因為Java對于當前字
體顯示不了的字符,不會像Windows一樣再采用缺省字體顯示。部分不常見漢字不能顯示,一般為顯示字庫中漢字不全,可以換另外的中文字
體試試。對于AWt/SWT,首先確定JVM運行環(huán)境的區(qū)域設置為中文,因為此處設計JVM與操
作系統(tǒng)api調(diào)用的轉(zhuǎn)換問題,再檢查其它問題。
JNI JNI中jstring以UTF-8編碼給我們,需要我們自行轉(zhuǎn)為本地編碼。對于Windows,可以采用WideCharToMultiByte/MultiByteToWideChar函數(shù)進行轉(zhuǎn)換,對于Unix,可以采用iconv庫。
這里從SUN jdk 1.4 源代碼中找到一段使用jvm String 對象的getBytes的轉(zhuǎn)換方
式,相對簡單和跨平臺,不需要第三方庫,但速度稍慢。函數(shù)原型如下:
/* Convert between Java strings and i18n C strings */ JNIEXPORT jstring NewStringPlatform(JNIEnv *env, const char *str);
JNIEXPORT const char * GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy);
JNIEXPORT jstring JNICALL JNU_NewStringPlatform(JNIEnv *env, const char *str);
JNIEXPORT const char * JNICALL JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy);
JNIEXPORT void JNICALL
JNU_ReleaseStringPlatformChars(JNIEnv *env, jstring jstr, const char *str);
附件jni_util.h,jni_util.c
TUXEDO/JOLT JOLT對于傳遞的字符串需要用如下進行轉(zhuǎn)碼
new String(ls_tt.getBytes(“GBK”),“iso8859-1”)
對于返回的字符串
new String(error_message.getBytes(“iso8859-1”),“GBK”);jolt 的系統(tǒng)屬性 bea.jolt.encoding不應該設置,如果設置,JSH會報告說錯誤的
協(xié)議.JDK1.4/1.5新增部分
字符集相關類(Charset/CharsetEncoder/CharsetDecoder)jdk1.4開始,對字符集的支持在java.nio.charset包中實現(xiàn)。
常用功能: 列出jvm所支持字符集:Charset.availableCharsets()2 能否對看某個Unicode字符編碼,CharsetEncoder.canEncode()
Unicode Surrogate/CJK EXT B Unicode 范圍一般所用為U0000-UFFFF范圍,jvm使用1個char就可以表示,對于 CJK EXT B區(qū)漢字,范圍大于U20000,則需要采用2個char方能表示,此即
Unicode Surrogate。這2個char的值范圍 落在Character.SURROGATE 區(qū)域內(nèi),用 Character.getType()來判斷。
jdk 1.4尚不能在Swing中正確處理surrogate區(qū)的Unicode字符,jdk1.5可以。對
于CJK EXT B區(qū)漢字,目前可以使用的字庫為”宋體-方正超大字符集”,隨Office 安裝。
常見問題
在JVM下,用System.out.println不能正確打印中文,顯示為??? System.out.println是PrintStream,它采用jvm缺省字符集進行轉(zhuǎn)碼工作,如果 jvm的缺省字符集為iso8859-1,則中文顯示會有問題。此問題常見于Unix下,jvm 的區(qū)域沒有明確指定的情況。
在英文UNIX環(huán)境下,用System.out.println能夠正確打印漢字,但是內(nèi)部處理錯誤 可能是漢字在輸入轉(zhuǎn)換時,就沒有正確轉(zhuǎn)碼:
即gbk文本à(iso8859-1轉(zhuǎn)碼)àjvm char(iso8859-1編碼漢字)à(iso8859-1轉(zhuǎn)碼)à
輸出。
gbk漢字經(jīng)過兩次錯誤轉(zhuǎn)碼,原封不動的被傳遞到輸出,但是在jvm中,并未以正
確的unicode編碼表示,而是以一個漢字字節(jié)一個char的方式表示,從而導致此類
錯誤。
GB2312-80,GBK,GB18030-2000 漢字字符集
GB2312-80 是在國內(nèi)計算機漢字信息技術發(fā)展初始階段制定的,其中包含了大部
分常用的一、二級漢字,和 9 區(qū)的符號。該字符集是幾乎所有的中文系統(tǒng)和國際
化的軟件都支持的中文字符集,這也是最基本的中文字符集。其編碼范圍是高位
0xa1-0xfe,低位也是 0xa1-0xfe;漢字從 0xb0a1 開始,結(jié)束于 0xf7fe;
GBK 是 GB2312-80 的擴展,是向上兼容的。它包含了 20902 個漢字,其編碼范
圍是 0x8140-0xfefe,剔除高位 0x80 的字位。其所有字符都可以一對一映射到
Unicode 2.0,也就是說 JAVA 實際上提供了 GBK 字符集的支持。這是現(xiàn)階段
Windows 和其它一些中文操作系統(tǒng)的缺省字符集,但并不是所有的國際化軟件都
支持該字符集,感覺是他們并不完全知道 GBK 是怎么回事。值得注意的是它不是
國家標準,而只是規(guī)范。隨著 GB18030-2000國標的發(fā)布,它將在不久的將來完成
它的歷史使命。
GB18030-2000(GBK2K)在 GBK 的基礎上進一步擴展了漢字,增加了藏、蒙等少數(shù)
民族的字形。GBK2K 從根本上解決了字位不夠,字形不足的問題。它有幾個特點,它并沒有確定所有的字形,只是規(guī)定了編碼范圍,留待以后擴充。
編碼是變長的,其二字節(jié)部分與 GBK 兼容;四字節(jié)部分是擴充的字形、字位,其
編碼范圍是首字節(jié) 0x81-0xfe、二字節(jié)0x30-0x39、三字節(jié) 0x81-0xfe、四字節(jié)
0x30-0x39。
UTF-8/UTF-16/UTF-32
UTF,即Unicode Transformer Format,是Unicode代碼點(code point)的實際表 示方式,按其基本長度所用位數(shù)分為UTF-8/16/32。它也可以認為是一種特殊的外
部數(shù)據(jù)編碼,但能夠與Unicode代碼點做一一對應。
UTF-8是變長編碼,每個Unicode代碼點按照不同范圍,可以有1-3字節(jié)的不同長度。
UTF-16長度相對固定,只要不處理大于U200000范圍的字符,每個Unicode代碼點
使用16位即2字節(jié)表示,超出部分使用兩個UTF-16即4字節(jié)表示。按照高低位字節(jié)
順序,又分為UTF-16BE/UTF-16LE。
UTF-32長度始終固定,每個Unicode代碼點使用32位即4字節(jié)表示。按照高低位字
節(jié)順序,又分為UTF-32BE/UTF-32LE。
UTF編碼有個優(yōu)點,即盡管編碼字節(jié)數(shù)不等,但是不像gb2312/gbk編碼一樣,需要
從文本開始尋找,才能正確對漢字進行定位。在UTF編碼下,根據(jù)相對固定的算法,從當前位置就能夠知道當前字節(jié)是否是一個代碼點的開始還是結(jié)束,從而相對
簡單的進行字符定位。不過定位問題最簡單的還是UTF-32,它根本不需要進行字
符定位,但是相對的大小也增加不少。
關于GCJ JVM GCJ并未完全依照sun jdk的做法,對于區(qū)域和編碼問題考慮尚不夠周全。GCJ啟動
時,區(qū)域始終設為en_US,編碼也缺省為iso8859-1。但是可以用Reader/Writer做
正確編碼轉(zhuǎn)換。
第二篇:java路徑問題小結(jié)
1.user.dir Java代碼
1.//通過來獲取;此目錄并非是固定的,而是根據(jù)該代碼所屬類運行時的環(huán)境而定。
2.//普通的java程序中獲得的是該類所屬項目的根目錄(d:workspaceapp)3.//在特定服務器下發(fā)布運行的javaweb程序則獲得的是該服務器下提供運行環(huán)境的目錄
4.//(如用Tomcat將獲得F:Tomcat 6.0bin)5.System.getProperties(“user.dir”)
2.classes目錄
顧名思義指存放類文件的根目錄。
普通java程序的classes目錄指appbin ? web項目的classes目錄是指appWebRootWEB-INFclasses ?
Java代碼
1.//在普通項目或web項目中
2.//s:獲得classes目錄絕對路徑(包括TestClass類所屬包目錄)3.// appbincomtest 4.// 或appWebRootWEB-INFclassescomtest 5.//ss:獲得classes目錄絕對路徑 6.// appbin 7.// 或appWebRootWEB-INFclasses 8.com.test.TestClass c=new com.test.TestClass();9.String s=c.getClass().getResource(“").getPath();10.String ss=c.getClass().getClassLoader().getResource(”“).getPath();
3.web項目根目錄(在服務器發(fā)布后)app
(1)根據(jù)ServeletContext的getRealPath()方法獲得絕對路徑 Java代碼
1.//第一種獲得”app“絕對路徑f:tomcat 6.0webappsapp 2.//第二、三種獲得”app“絕對路徑f:tomcat 6.0webappsapp 3.getServletContext.getRealPath(”“);4.getServletContext.getRealPath(”“);5.getServletContext.getRealPath(”/“);
(2)根據(jù)HttpServletRequest的getContextPath()方法獲得相對路徑 Java代碼
1.getRequest().getContextPath();
4.在struts2框架中獲得發(fā)布后web項目的根目錄 Java代碼
1.//利用ServletActionContext的靜態(tài)方法
2.String real=ServletActionContext.getServletContext().getRealPath(”");3.String relative=ServletActionContext.getRequest().getContextPath());
如果使用user.dir的值的話獲得的路徑為%Tomcat_Home%bin,所以不推薦使用user.dir這一環(huán)境變量來獲取路徑。
對于新手來說,搞清楚java項目的開發(fā)目錄和發(fā)布目錄的信息是十分必要的,特別是使用集成開發(fā)環(huán)境下,目錄的安排十分透明,如果脫離開發(fā)環(huán)境的話,很多新手都會對項目目錄結(jié)構(gòu)很迷茫。
第三篇:java小結(jié)
//1.累加 public class 累加 {
}
//2.階乘
public class 30的階乘 {
} public static void main(String[] args){
} int product=1;for(int i=1;i<=30;i++){ product=*i;} public static void main(String[] args){
} int i=1;for(int counter=1;counter<=100;counter++){ } System.out.println(i);i+=counter;
//3.倒序輸出
法1 用char數(shù)組思想 import java.util.Scanner;public class 逆序輸出 {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);// String input[]=new String[4];input=scan.nextLine();// huiche
// String result=“";char[] Array=input[4].toCharArray();for(int i=Array.length-1;i>=0;i--){
} result+=Array[i];} System.out.println(result);} //倒序輸出 法2 用reverse()方法 import javax.swing.JOptionPane;public static void main(String[] args){
}
String a = null;StringBuffer b;//輸入
a=JOptionPane.showInputDialog(a);StringBuffer c1=new StringBuffer(a);b=c1.reverse();System.out.println(b);
//4.輸出100 121 144...361 public class平方輸入數(shù)組 {
}
//5.求最大公約數(shù)
private static int gys(int m,int n)
{
if(n==0)
return m;else public static void main(String[] args){
} int[] array=new int[10];for(int i=0;i<10;i++){ } array[i]=Math.pow((i+10),2.0);
for(int k=0;k return gcd(n,m%n); } //6.求最小公倍數(shù) public static int gbs(int n1,int n2){ int a =(n1>n2)? n1 : n2; for(int j=a;j<=n1*n2;j++) { if(j%n1==0 && j%n2==0) { return j; } } return 0;} //7.1)十進制整數(shù)轉(zhuǎn)化為二進制整數(shù)采用“除2取余,逆序排列” import java.util.Scanner;public class Main { public static void main(String[] args){ //第一行輸入要幾組測試數(shù)據(jù) int N=0,a;//N為輸入幾組數(shù)據(jù),a為輸入的十進制數(shù)字 } String b = null;Scanner scan=new Scanner(System.in);N=scan.nextInt();Main num=new Main();for(int i=1;i<=N;i++){ } a=scan.nextInt();b=num.deimalBinary(a);int d=num.Calcute(b);if(d%2==0)System.out.println(”Even“);else System.out.println(”O(jiān)dd“); /*一個方法得到二進制數(shù),用遞歸 *用2去除十進制整數(shù),可以得到一個商和余數(shù); *再用2去除商,又會得到一個商和余數(shù),} *如此進行,直到商為零時為止,*然后把先得到的余數(shù)作為二進制數(shù)的低位有效位,*后得到的余數(shù)作為二進制數(shù)的高位有效位,依次排列起來 */ public String deimalBinary(int a){ } public int Calcute(String b){ } char[] Array=b.toCharArray();for(int i=0;i } if(Array[i]=='1'){ } counter+=1;return counter; //7.2)十進制小數(shù)轉(zhuǎn)換為二進制小數(shù)采用“乘2取整,順序排列” /*用2乘十進制小數(shù),可以得到積,*將積的整數(shù)部分取出,再用2乘余下的小數(shù)部分,//8.矩陣運算(加減乘)//矩陣運算 *又得到一個積,再將積的整數(shù)部分取出,*如此進行,直到積中的小數(shù)部分為零,*或者達到所要求的精度為止。 *然后把取出的整數(shù)部分按順序排列起來,*先取的整數(shù)作為二進制小數(shù)的高位有效位,后取的整數(shù)作為低位有效位。*/ import java.util.Scanner;public class Main { public static void main(String[] args){ int N1,M1,N2,M2,K;Scanner scan=new Scanner(System.in);N1=scan.nextInt();M1=scan.nextInt();int[][] a=new int[N1][M1];for(int i=0;i for(int j=0;j N2=scan.nextInt();M2=scan.nextInt();int[][] b=new int[N2][M2];for(int i=0;i { } b[i][j]=scan.nextInt();} K=scan.nextInt();if(K==1)//加法 { int[][] c=new int[N1][M1];for(int i=0;i } { for(int j=0;j } System.out.println();} } if(K==2)//減法 { int[][] c=new int[N1][M1];for(int i=0;i } for(int j=0;j for(int j:i){ System.out.print(j+” “);} System.out.println();} } if(K==3)//乘法 { int[][] c=new int[N1][M2];for(int i=0;i } { for(int j=0;j } for(int p=0;p c[i][j]+=a[i][p]*b[p][j];for(int[] i:c)for(int j:i){ System.out.print(j+” “);} System.out.println();} } } } 9.//保留確定位數(shù)輸出 import java.text.DecimalFormat;//非四舍五入 DecimalFormat myformat=new DecimalFormat(”#0.00"); myformat.format(double num);//四舍五入,例為保留2位 double f=3.1415926; BigDecimal a=new BigDecimal(f); double af=a.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 注:本小結(jié)報告來自兩份論文 [1]上角標1代表 論文 <網(wǎng)絡編碼的研究進展> 楊林 鄭剛等 [2]上角標2代表 論文 <網(wǎng)絡編碼研究綜述> 陶少國等 網(wǎng)絡編碼研究綜述 萬里 基本概念 起源:R.Alshwede的蝴蝶網(wǎng)絡模型定義:網(wǎng)絡編碼是一種融合編碼和路由的信息交換技術,在傳統(tǒng)存儲轉(zhuǎn)發(fā)的路由方法基礎上,通過允許對接收的多個數(shù)據(jù)包進行編碼信息融合,增加單次傳輸?shù)男畔⒘?,提高網(wǎng)絡整體性[1]能。 [1]本質(zhì):利用節(jié)點的計算能力提高鏈路帶寬的利用率。核心思想:具備編碼條件的網(wǎng)絡節(jié)點對接收到的信息進行編碼,然后傳輸給下一級的網(wǎng)絡節(jié)點,收到信息的下一級節(jié)點如果具備編碼條件,又對其接受的信息按照同樣的方式進行傳輸與處理,如此反復,直到所有經(jīng)過處理后的信息匯聚到信宿節(jié)點為止。最后,在信宿節(jié)點,[2]通過譯碼,即可譯出信源發(fā)送的原始信息。主要優(yōu)缺點: 優(yōu)點: 提升網(wǎng)絡吞吐量 2 均衡網(wǎng)絡負載 從作者的例子[Fig.2]可以看出,雖然傳輸鏈路增加了,但是每條鏈路上傳輸?shù)男畔⒏?,解決了網(wǎng)絡擁塞問題。3 提高帶寬利用率 同2,雖然傳輸鏈路增多了,但是每條鏈路上的信息減少了(均衡了),總體是減少了網(wǎng)絡帶寬,提高了網(wǎng)絡帶寬利用率。缺點: 雖然網(wǎng)絡編碼優(yōu)點突出, 但運用網(wǎng)絡編碼增加了計算的復雜性, 而且網(wǎng)路節(jié)點需要緩存足夠的輸入信息, 因此編碼操作增加了傳輸時延和節(jié)點的額外的I/ O、CPU消耗。統(tǒng)計數(shù)據(jù)表明, 即使應用最有效的隨機網(wǎng)絡編碼,其編碼和譯碼的時間也不容忽視。此外, 應用網(wǎng)絡編碼還存在同步問題, 這主要是由于信宿節(jié)點必須等待收到足夠的編碼信息, 才能開始 [2]譯碼。同步問題給在實時系統(tǒng)中應用網(wǎng)絡編碼提出了挑戰(zhàn)。 [2] 2 原理與數(shù)學模型 2.1網(wǎng)絡編碼分類 網(wǎng)絡編碼按照節(jié)點輸出和輸入的關系可劃分為線性網(wǎng)絡編碼和非線性網(wǎng)絡編碼 網(wǎng)絡編碼按照編碼系數(shù)生成的隨機性可劃分為隨機網(wǎng)絡編碼和確定性網(wǎng)絡編碼(通過算[1] 法算出系數(shù))2.2線性網(wǎng)絡編碼 目前的網(wǎng)絡編碼研究均局限于有限域中的線性網(wǎng)絡編碼。2.3幾個基本概念 信息流:信源發(fā)送的信息,鏈路傳輸?shù)男畔⒁约靶潘藿邮盏降男畔?,均以向量形式?/p> [2]之于有限域。稱其為信息流。本地編碼向量:將節(jié)點上的信息流作為節(jié)點輸入鏈路上傳輸信息的線性組合。[鏈路的消息流與輸入鏈路的消息流的映射關系] 3 全局編碼向量:將信源發(fā)送信息表示成信息流向量,將鏈路上傳輸?shù)男畔⒘鳟斪鲂旁聪蛄康男畔⒘飨蛄扛髟氐木€性組合,該線性組合系數(shù)構(gòu)成的向量就是該鏈路的全局編碼向量。[鏈路的消息流與信源的信息流的映射關系] 備注:如果忘記 可以參考論文2中的Fig.3 2.4數(shù)學模型 [2] 3網(wǎng)絡編碼的構(gòu)造方法 網(wǎng)絡編碼的KEY:求得每條鏈路對應的編碼向量 3.1集中式編碼方法 3.1.1 指數(shù)時間算法 設N1,N2,...,Nn表示所有編碼鏈路對應的編碼向量, 則必定存在函數(shù)關系: p = f(N1,N2,..,Nn),并稱使p=0的點(N1,N2 , ?,Nn)的集合稱為被“函數(shù)p 分割出來的代數(shù)簇”,[2]因而算法的目標就是求得一個不位于“函數(shù)p分割出來的代數(shù)簇”上的點(p?0)。3.1.2 多項式時間算法 3.1.3其他算法 1引入通用LCM(貪婪算法與啟發(fā)式算法)可實現(xiàn)多速率的網(wǎng)絡編碼 但是由于計算量大,實現(xiàn)過程復雜,不實用(作為多速率網(wǎng)絡編碼的探索,具有很重要的意義) 2線性多播、線性廣播和線性擴散:線性擴散是線性廣播的特例, 線性廣播是線性多播的特例, 反之不成立.線性廣播說明了通過增加信源發(fā)送的信息流向量的維數(shù), 可以提升傳輸 [2]速率;線性擴散能保證信源節(jié)點以互補的形式發(fā)送信息流。 [1]3沖突圖法、矩陣滿秩法、圖染色法等幾種構(gòu)造方法。3.2分布式編碼方法 3.2.1確定系數(shù)構(gòu)造法 其核心思想是將網(wǎng)絡拓撲分解成多個子樹,并保證每個子樹的編碼矢量屬于其父樹編碼 [1]矢量的擴張空間,且任意兩個子樹的共有信宿的編碼矢量均線性無關。3.2.2隨機系數(shù)網(wǎng)絡編碼 隨機網(wǎng)絡編碼(簡稱RNC),該方法基于一種隨機選擇編碼向量的策略:對于除了信宿節(jié)點外的所有中間節(jié)點,只要在一個足夠大的有限域上隨機選擇它們輸入鏈路到輸出鏈路的映射,而且各節(jié)點映射關系的選取是相互獨立的,就能以較高概率使各個信宿節(jié)點對應的系統(tǒng)轉(zhuǎn)移矩陣滿秩,即各信宿節(jié)點能以較高的概率成功譯碼。與時間多項式算法總能保證成功譯碼不同, 在RNC 中,雖然不能確保最終形成的系統(tǒng)轉(zhuǎn)移矩陣M滿秩, 但由于是隨機選擇編碼向量, 其復雜性與確定性算法相比要低得多, 更易于實現(xiàn), 而且99%以上的譯碼成功率在一般情況也足以滿足需求.因此,隨機網(wǎng)絡編碼具有重要的理論價值和應用價值,得到了廣泛的關注和 [2]應用, 如微軟提出的P2P文件共享系統(tǒng)Avalanche便是基于RNC的典型應用。3.3集中式與分布式的比較 集中式:需要了解全局拓撲以分配編碼系數(shù),可擴展性差。 確定分布式:掌握局部拓撲即可對入編信息進行編碼,但需要通信開銷。 [1]隨機網(wǎng)絡編碼:實用性強,需要較大的字母表,存在解碼失敗概率。 4性能參考以及優(yōu)化 網(wǎng)絡編碼的主要性能指標包括字母表、編解碼速度和編碼增益等.其中,字母表是最重要的性能指標,決定了網(wǎng)絡編碼解的存在性、編解碼復雜度、延時以及存儲開銷.編解碼速度反映了編解碼操作的計算復雜度.編碼增益則表征網(wǎng)絡帶寬的利用效率.網(wǎng)絡編碼設計的一個重要目標就是盡可能使用小的字母表和低復雜度的編解碼操作來提高網(wǎng)絡吞吐量或減[1]小延時. 4.1網(wǎng)絡編碼復雜性的影響因素分析 4.1.1編碼構(gòu)造方法 網(wǎng)絡編碼的核心,目標是尋找復雜性低的算法(分布式與集中式的共同目標)。4.1.2編碼操作數(shù) 可從三個角度分析:信息分組、編碼鏈路和編碼節(jié)點, 其中從信息分組的角度減少其操作數(shù)目是降低編碼操作復雜性最理想的方式, 但是分析的難度較大, 一般均從減少編碼鏈 [2]路或者節(jié)點的數(shù)目來考慮。4.1.3有限域的大小 保證足夠的譯碼成功率的前提下(有限域過小,譯碼成功率降低), 應盡量減少有限域的大小。 4.2基于簡單網(wǎng)絡的解決方案 將普通網(wǎng)絡轉(zhuǎn)化為某種易于表達, 且各網(wǎng)絡節(jié)點具有共同特征的“簡單網(wǎng)絡”將普通網(wǎng)絡轉(zhuǎn)化為簡單網(wǎng)絡, 其網(wǎng)絡拓撲變得十分簡單,但一個不容忽視的問題就是: 簡單網(wǎng)絡的規(guī)模(節(jié)點數(shù))比原普通網(wǎng)絡卻膨脹了許多, 也就是說網(wǎng)絡編碼的代價被放大了,“簡單網(wǎng)絡”的最小代價并不等于原網(wǎng)絡的最小代價.但是, 將網(wǎng)絡“簡化”處理的思想在方法論上具有 [2]重要的借鑒意義,為最小代價的網(wǎng)絡編碼提供了研究方向。4.3基于信息流 信息流分解的基本原理是按照網(wǎng)絡中信息流的特征和共性, 將原網(wǎng)絡節(jié)點劃分為一系列的子樹圖, 這些子樹圖中的節(jié)點擁有相同的編碼向量, 子樹里面的節(jié)點的拓撲結(jié)構(gòu)不影 [2]響整個系統(tǒng)的多播傳輸, 因此每個子樹可以當作一個節(jié)點來處理。4.4基于最小代價函數(shù)的解決方案 借鑒路由多播的最小代價樹,將網(wǎng)絡編碼轉(zhuǎn)化為線性規(guī)劃問題。 5應用與研究趨勢 5.1應用領域 [1]Ad Hoe網(wǎng)絡、傳感器網(wǎng)絡、P2P內(nèi)容分發(fā)、分布式文件存儲和網(wǎng)絡安全等領域。 [2]無線網(wǎng)絡、應用層多播和P2P文件共享、傳輸?shù)牟铄e控制。5.2研究趨勢 5.2.1多源網(wǎng)絡編碼 對于信源數(shù)目大于2的網(wǎng)絡編碼多播,研究不夠充分,但多源多播廣泛存在。5.2.2非組播網(wǎng)絡 對于非組播網(wǎng)絡的網(wǎng)絡編碼理論研究。5.2.3非線性網(wǎng)絡編碼 非線性研究尚未起步,性能還不可知,比線性網(wǎng)絡編碼要求與難度更高。5.2.4具體實現(xiàn) 網(wǎng)絡編碼的具體實現(xiàn)需要考慮諸多因素,也是有意義的研究方向。5.2.5與其他領域的融合 與信源編碼的聯(lián)合設計與優(yōu)化、與信道編碼和調(diào)制技術的結(jié)合、與多描述分層編碼的結(jié)合。 5.2.6降低網(wǎng)絡編碼復雜度 降低網(wǎng)絡編碼復雜度,實現(xiàn)最小代價網(wǎng)絡編碼。5.2.7安全方面 無線網(wǎng)絡編碼在安全方面的研究。 個人簡歷 基本信息 姓名:** 性別:男 民族:漢學歷:本科 專業(yè):工商管理 畢業(yè)院校:**大學出生年月:**年04月 15日婚姻:否電話:** 現(xiàn)住址:**市** 籍貫:****Email:**@qq.com 求職意向 Java軟件開發(fā)工程師 專業(yè)技能 熟練掌握Java熟練掌握Oracle數(shù)據(jù)庫,, SQL 熟練掌握Jsp、JavaScript、、、Xml等 掌握Struts2、Hibernate、Spring模式下的開發(fā)。熟練掌握Tomcat容器以及J2EE 能夠熟練運用 教育背景及培訓經(jīng)歷 **.9-**.7就讀于**大學專業(yè):工商管理 **.5-**.9****培訓高級Java開發(fā) C+E 國際軟件工程師項目經(jīng)驗 在線考試系統(tǒng) 項目簡述:,從服務器隨機調(diào)取試題并進行分數(shù)查詢.相關技術:Java,JavaSE多線程基礎.運行環(huán)境:Linux & Windows XP 項目職責:作為設計人員,獨立編寫并設計整體業(yè)務邏輯,并進行相應文檔的編寫以及開發(fā)計劃的制定,作為開發(fā)人員,對整個設計進行實現(xiàn),并進行相應的測試。 所得收獲:掌握常見數(shù)據(jù)結(jié)構(gòu)和實用算法,培養(yǎng)良好的編程習慣。 GWAP通用電子商務平臺 項目簡述:該系統(tǒng)主要由用戶管理、產(chǎn)品展示、購物車、訂單生成、產(chǎn)品管理等模塊組成,模擬當當網(wǎng),為網(wǎng)上在線購物而設計的一個應用系統(tǒng) 相關技術:Jsp、JavaScript、Struts2、Hibernate、Spring、Tomcat 5.5、mySQL 運行環(huán)境:Linux & Windows XP 項目職責:作為設計人員,跟隨老師完成GWAP整體架構(gòu)設計,制定開發(fā)計劃,組織協(xié)調(diào)本組軟件開發(fā)人員進行子項目的設計,開發(fā)和測試;完成系統(tǒng)的概要設計和詳細設計、提交設計文檔和開發(fā)計劃 作為開發(fā)人員,重點參與用戶注冊模塊、GWAP中購物車模塊、訂單生成模塊等的開發(fā),根據(jù)設計文檔進行編碼,并完成相應的單元測試 所得收獲:通過此商務平臺的開發(fā),掌握了Struts2框架的使用,在購物車模塊,巧妙的使用兩個list分別表示“用戶結(jié)算的商品”和“暫不購買的商品”,從而簡化了業(yè)務邏輯,也進而簡化了購物車的JSP設計。在此過程中,積累了一定的項目管理經(jīng)驗,提高了與小組成員協(xié)調(diào)溝通的能力以及為小組成員提供技術支持的能力;提高了軟件測試能力并了解了常用軟件測試工具的使用。 所獲證書 2012.9達內(nèi)公司簽發(fā)的C+E國際軟件工程師證書 自我評價 我極富敬業(yè)精神、積極開朗、樂觀向上、有很強的溝通能力和團隊協(xié)作能力。能承受壓力、喜歡富有挑戰(zhàn)性和具有發(fā)展空間的工作。IT行業(yè)是一個具有挑戰(zhàn)性的行業(yè)、隨著科技的不斷發(fā)展它也在不斷更新、不僅要會工作還要會學習、我喜歡接受這種挑戰(zhàn)、也愿意從事這方面工作。 能認真執(zhí)行公司決策,服從公司領導安排,做事能吃苦耐勞,工作積極,有良好的團隊合作精神。第四篇:網(wǎng)絡編碼知識小結(jié)
第五篇:Java軟件開發(fā)工程師中文簡歷