<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    athrunwang

    紀元
    數據加載中……

    Java壓縮技術(一) ZLib 轉貼 Snowolf的意境空間! http://snowolf.iteye.com/blog/465433

         摘要: Snowolf的意境空間!轉貼:http://snowolf.iteye.com/blog/465433應好友需要,整理一下Java的壓縮算法,先從ZLib開始。 相關鏈接: Java壓縮技術(一) ZLib Java壓縮技術(二) ZIP壓縮——Java原生實現 Java壓縮技術(三) ZIP解壓縮——Jav...  閱讀全文

    posted @ 2011-12-26 09:50 AthrunWang 閱讀(583) | 評論 (0)編輯 收藏
    Java驗證碼

         摘要: Java生成驗證碼圖片 1.Servlet生成驗證碼圖片 1 package com.logcd.servlet; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics2D; 6 import java.awt.image.BufferedImage; 7 import ...  閱讀全文

    posted @ 2011-12-06 10:36 AthrunWang 閱讀(2767) | 評論 (3)編輯 收藏
    dom4j對xml文件進行更新操作

    dom4j是一個Java的XML API,類似于jdom,用來讀寫XML文件的。dom4j是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它 地址。如今你可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這是必須使用的jar包, Hibernate用它來讀寫配置文件。

    今天項目需要對已存在的xml文件進行更新,對比之下,感覺dom4j還是比較適合的,現在將代碼貼上,方便以后參考

    /**
    * 將訂單信息寫入xml文件
    *
    @param map
    *
    @throws DocumentException
    *
    @throws IOException
    */
    public void writeXML(Map map) throws DocumentException, IOException{

    if(map != null && map.get("respCode").equals("0000")){//訂單提交成功,未付款
    //將訂單信息寫入文件
    File inputXML=new File("e:/orderList.xml");
    //使用 SAXReader 解析 XML 文檔 orderList.xml
    SAXReader saxReader=new SAXReader();
    Document document=saxReader.read(inputXML);

    Element orders=document.getRootElement();//根節點

    Element order = orders.addElement("order");//訂單節點

    Element merchantId = order.addElement("merchantId");//商戶ID
    merchantId.setText(map.get("merchantId").toString());

    Element transType = order.addElement("transType");//訂單狀態
    transType.setText(map.get("transType") == null ? "00":map.get("transType").toString());

    Element merchantOrderId = order.addElement("merchantOrderId");//訂單ID
    merchantOrderId.setText(map.get("merchantOrderId").toString());

    Element merchantOrderTime = order.addElement("merchantOrderTime");//訂單時間
    merchantOrderTime.setText(map.get("merchantOrderTime").toString());

    Element merchantOrderAmt = order.addElement("merchantOrderAmt");//訂單金額
    merchantOrderAmt.setText(map.get("merchantOrderAmt").toString());


    Writer writer = new FileWriter(inputXML);
    OutputFormat format= OutputFormat.createPrettyPrint();//格式化
    XMLWriter xmlWriter = new XMLWriter(writer,format);
    xmlWriter.write(document);
    xmlWriter.close();
    }
    }

    posted @ 2011-12-06 10:34 AthrunWang 閱讀(184) | 評論 (0)編輯 收藏
    maven環境快速搭建

    第一步:配置maven環境

     

    將下載文件解壓,然后設置maven環境

    如果你配置過jdk的話,這里對你應該不難。如我的maven環境為:F:\maven\apache-maven-3.0.3

    我的電腦-----屬性----高級-----環境變量-----環境變量-----新建

    變量名:M2_HOME

    變量值:F:\maven\apache-maven-3.0.3

    找到path 

    在環境變量值尾部加入:;%M2_HOME%\bin;---前面注意分號

    當然,你也可以直接在path 路徑下加入:;F:\maven\apache-maven-3.0.3\bin  只是上面的方式更優雅一點。

    我新建立

    打開命令提示符(開始---運行---cmd,檢查我們的java環境和maven環境是否有誤。

     

     

    第二步:修改倉庫位置

     

    修改我們倉庫地址,倉庫用于存放我們項目所依賴的所有jar包。

    我的倉庫路徑:F:\maven\repo----這個路徑是我自己創建,你可以將路徑創建在任何位置。

    我們打開…\apache-maven-3.0.3\conf\目錄下的setting.xml文件,設置成我們創建的倉庫路徑

    下面我們用一個命令驗證一下。打開命令提示符,輸入:mvn help:system 

    該命令會打印出所有的java系統屬性和環境變量。這些信息對我們日常的編程工作很有幫且。

    如果運行的過程中沒有錯誤,打開我們倉庫(F:\maven\repo)會發現里面多了一些文件。這些文件就是我們從maven的中央倉庫下載到本地倉庫的。

     

    第三步:創建maven項目

    創建一個我們自己的項目。

    我們通過maven命令行方式創建一個項目

    mvn archetype:create -DgroupId=com.chongshi.test -DartifactId=hello -DpackageName=com.chongshi.test -Dversion=1.0

     

    因為是第一次構建項目,所有依賴的jar包都要從maven的中央倉庫下載,所以需要時間等待。等以后我們的本地倉庫中積累了我們常用的jar包后,我們的開發將變得非常規范和方便。^_^!!

     

    借助下載jar包的時間,我們來了解一下pom.xml文件。

     

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
    ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.chongshi.test</groupId>
    <artifactId>hello</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>hello</name>
    <url>http://maven.apache.org</url>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    </project>

    Ø project:pom.xml文件中的頂層元素; 
    Ø modelVersion:指明POM使用的對象模型的版本。這個值很少改動。
    Ø groupId:指明創建項目的組織或者小組的唯一標識。GroupId是項目的關鍵標識,典型的,此標識以組織的完全限定名來定義。比如,org.apache.maven.plugins是所有Maven插件項目指定的groupId。 

    Ø artifactId:指明此項目產生的主要產品的基本名稱。項目的主要產品通常為一個JAR文件。第二,象源代碼包通常使用artifactId作為最后名稱的一部分。典型的產品名稱使用這個格式: <artifactId>- <version>. <extension>(比如:myapp-1.0.jar)。 

    Ø version:項目產品的版本號。Maven幫助你管理版本,可以經常看到SNAPSHOT這個版本,表明項目處于開發階段。 

    Ø name:項目的顯示名稱,通常用于maven產生的文檔中。 

    Ø url:指定項目站點,通常用于maven產生的文檔中。 

    Ø description:描述此項目,通常用于maven產生的文檔中。

     

    對于一個項目中只有下面的一部分是是我們需要關注的:

    <groupId>com.chongshi.test</groupId>

     <artifactId>hello</artifactId>

     <version>1.0</version>

     

    第四步:編譯項目代碼

    我們的項目已經創建完成。但我們點開目錄發現,它并不是我們eclipse所需要的項目目錄格式。我們需要把它構建成我們eclipse可以導入的項目。

    在命令提示符下進入到我們的創建的項目目錄(F:\maven\hello)下,執行:mvn clean compile

    Clean 告訴maven清理輸入出目錄target/,compile告訴maven編譯項目主代碼。

    不要急,我們又需要一段時間來下載,相關jar包。^_^!第一次用maven要學會淡定。

     

    項目是編譯完了,但項目的目錄結構還不是我們想要的eclipse的項目結構,是不能導入到eclipse中的。所以,還需要執行一個命令:mvn eclipse:eclipse

     

    命令執行完成后就得我們需要的項目目錄了。

     

    第五步:導入eclipse工具

     

    打開的我們的eclipse工具。

    先配置maven倉庫路徑

    Window----Perferences-----java-----Build Path-----Classpath Variables

    New一個變量的類路徑。

    Name :M2_REPO   注意這個名字必須要大寫。

    Path :F:/maven/repo  點擊“Folder…”找到有本地倉庫的位置。

     

    下面,可以導入我的hello項目了。Eclipse如何導入項目,我這里就不說了,如果你是個java開發人員的話。

     

    第六步:包的更新與下載

     

    打開項目發現我們junit 是3.8.1的,有點老了。那我想換成4.7的,如何通過maven的方式更換呢。其實,很簡單,打開我們項目下的的pom.xml文件。

    ……
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    ……

    更改變,junit的版本號,然后重新執行:mvn eclipse:eclipse  

    Maven 中央倉庫地址:http://search.maven.org

     

    假如,我們想下載一個struts jar包。在搜索框內搜索strruts ,會要列出中央倉庫中的所有struts版本。

    列表的格式與我們pom.xml配置文件的格式是對應的。

     

     

     

     

    我們在pom.xml中加入:

    <groupId>stuts</groupId>

     <artifactId>struts-scription</artifactId>

     <version>1.0.1</version>

    然后更新項目就可從中央倉庫下載我們想要的任意jar包(必須是開源的包)

     

    繼續學習內容:

    1. 如何創建一個web項目?

      如果想讓maven應用到項目開發中,這個是必須的。

    2. 如何使用jeety?

      maven提供的一個容器,類似于tomcat

    3. 如何創建一個代理倉庫?

      如果是團隊開發,這個很有必要,我們不可能每次都到中央倉庫拿包,那樣很慢,如果開發人員A已經下了某包,開發人員B還要下;創建代理倉庫,A第一次下的包會存入代理倉庫中,B要用時直接從代理倉庫取就行。

    posted @ 2011-12-06 10:32 AthrunWang 閱讀(323) | 評論 (0)編輯 收藏
    java環境變量配置——windows 平臺上

     1 windows xp下配置JDK環境變量:
    2 1.安裝JDK,安裝過程中可以自定義安裝目錄等信息,例如我們選擇安裝目錄為D:\java\jdk1.5.0_08;
    3
    4   2.安裝完成后,右擊“我的電腦”,點擊“屬性”;
    5
    6 3.選擇“高級”選項卡,點擊“環境變量”;
    7
    8 4.在“系統變量”中,設置3項屬性,JAVA_HOME,PATH,CLASSPATH(大小寫無所謂),若已存在則點擊“編輯”,不存在則點擊“新建”;
    9
    10 5.JAVA_HOME指明JDK安裝路徑,就是剛才安裝時所選擇的路徑D:\java\jdk1.5.0_08,此路徑下包括lib,bin,jre等文件夾(此變量最好設置,因為以后運行tomcat,eclipse等都需要依*此變量);
    11
    12
    13 Path使得系統可以在任何路徑下識別java命令,設為:
    14
    15 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
    16
    17   CLASSPATH為java加載類(class or lib)路徑,只有類在classpath中,java命令才能識別,設為:
    18
    19 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (要加.表示當前路徑)
    20
    21   %JAVA_HOME%就是引用前面指定的JAVA_HOME;
    22
    23 6.“開始”->;“運行”,鍵入“cmd”;
    24
    25 7.鍵入命令“java -version”,“java”,“javac”幾個命令,出現畫面,說明環境變量配置成功;
    26
    27 8.好了,打完收工。下面開始你的第一個java程序吧。

    posted @ 2011-12-06 10:20 AthrunWang 閱讀(134) | 評論 (0)編輯 收藏
    數字簽名是什么?

    今天,我讀到一篇好文章

    它用圖片通俗易懂地解釋了,"數字簽名"(digital signature)和"數字證書"(digital certificate)到底是什么。

    我對這些問題的理解,一直是模模糊糊的,很多細節搞不清楚。讀完這篇文章后,發現思路一下子就理清了。為了加深記憶,我把文字和圖片都翻譯出來了。

    文中涉及的密碼學基本知識,可以參見我以前的筆記

    ====================================================

    數字簽名是什么?

    作者:David Youd

    翻譯:阮一峰

    原文網址:http://www.youdzone.com/signature.html

    1.

    鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。

    2.

    鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把。

    3.

    蘇珊要給鮑勃寫一封保密的信。她寫完后用鮑勃的公鑰加密,就可以達到保密的效果。

    4.

    鮑勃收信后,用私鑰解密,就看到了信件內容。這里要強調的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密。

    5.

    鮑勃給蘇珊回信,決定采用"數字簽名"。他寫完后先用Hash函數,生成信件的摘要(digest)。

    6.

    然后,鮑勃使用私鑰,對這個摘要加密,生成"數字簽名"(signature)。

    7.

    鮑勃將這個簽名,附在信件下面,一起發給蘇珊。

    8.

    蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。

    9.

    蘇珊再對信件本身使用Hash函數,將得到的結果,與上一步得到的摘要進行對比。如果兩者一致,就證明這封信未被修改過。

    10.

    復雜的情況出現了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密。

    11.

    后來,蘇珊感覺不對勁,發現自己無法確定公鑰是否真的屬于鮑勃。她想到了一個辦法,要求鮑勃去找"證書中心"(certificate authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息一起加密,生成"數字證書"(Digital Certificate)。

    12.

    鮑勃拿到數字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時,再附上數字證書就行了。

    13.

    蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明"數字簽名"是否真的是鮑勃簽的。

    14.

    下面,我們看一個應用"數字證書"的實例:https協議。這個協議主要用于網頁加密。

    15.

    首先,客戶端向服務器發出加密請求。

    16.

    服務器用自己的私鑰加密網頁以后,連同本身的數字證書,一起發送給客戶端。

    17.

    客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發機構"列表。客戶端會根據這張列表,查看解開數字證書的公鑰是否在列表之內。

    18.

    如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。

    19.

    如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告。

    20.

    如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對信息進行加密,然后與服務器交換加密信息。

    (完)

    posted @ 2011-11-30 11:53 AthrunWang 閱讀(167) | 評論 (0)編輯 收藏
    Oracle中JDBC對BLOB和CLOB讀取的專用處理和通用處理

    設有表:
    create table blobimg(idintprimarykey,contentsblob);
    一、BLOB入庫的專用訪問:
    1)最常見于Oracle的JDBC示例中
    一般是先通過select...forupdate鎖定blob列,然后寫入blob值,然后提交。要用到特定的OracleBLOB類。
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb","test","test");
    //處理事務
    con.setAutoCommit(false);
    Statementst=con.createStatement();
    //插入一個空對象
    st.executeUpdate("insertintoBLOBIMGvalues(1,empty_blob())");
    //用forupdate方式鎖定數據行
    ResultSetrs=st.executeQuery(
    "selectcontentsfromBLOBIMGwhereid=1forupdate");
    if(rs.next()){
    //使用oracle.sql.BLOB類,沒辦法了,變成專用的了
    oracle.sql.BLOBblob=(oracle.sql.BLOB)rs.getBlob(1).;
    //到數據庫的輸出流
    OutputStreamoutStream=blob.getBinaryOutputStream();
    //這里用一個文件模擬輸入流
    Filefile=newFile("d:\\proxy.txt");
    InputStreamfin=newFileInputStream(file);
    //將輸入流寫到輸出流
    byte[]b=newbyte[blob.getBufferSize()];
    intlen=0;
    while((len=fin.read(b))!=-1){
    outStream.write(b,0,len);
    }
    //依次關閉
    fin.close();
    outStream.flush();
    outStream.close();
    }
    con.commit();
    con.close();

     2)再厲害一點的,是通過調用DBMS_LOB包中的一些函數來處理,效率好像也不錯.
     不過,要使用到存儲過程,用到專用類OracleCallableStatement。
     例:
    importjava.sql.*;
    importjava.io.*;
    importoracle.jdbc.driver.*;
    importoracle.sql.*;
    classTestBlobWriteByDBMS_LOB{

    publicstaticvoidmain(Stringargs[])throwsSQLException,
    FileNotFoundException,IOException
    {
    DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());
    Connectionconn=
    DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora92","scott","tiger");
    conn.setAutoCommit(false);
    Statementstmt=conn.createStatement();
    stmt.execute("deletefromdemo");
    System.out.println("deletedfromdemo");
    stmt.execute("insertintodemo(id,theBlob)values(s_enr.nextval,empty_blob())");
    conn.commit();
    System.out.println("committed");
    ResultSetrset=stmt.executeQuery("SELECTtheBlobFROMdemowhereid=s_enr.currvalFORUPDATE");
    System.out.println("ExecutedQuery");
    if(rset.next())
    {
    System.out.println("Fetchedrow");
    BLOBl_mapBLOB=((OracleResultSet)rset).getBLOB(1);
    FilebinaryFile=newFile("e:\\free\\jo.jpg");
    FileInputStreaminstream=newFileInputStream(binaryFile);
    intchunk=32000;

    System.out.println("Chunk="+chunk);

    byte[]l_buffer=newbyte[chunk];
    intl_nread=0;

    OracleCallableStatementcstmt=
    (OracleCallableStatement)conn.prepareCall("begindbms_lob.writeappend(:1,:2,:3);end;");
    cstmt.registerOutParameter(1,OracleTypes.BLOB);
    while((l_nread=instream.read(l_buffer))!=-1)
    {
    cstmt.setBLOB(1,l_mapBLOB);
    cstmt.setInt(2,l_nread);
    cstmt.setBytes(3,l_buffer);
    cstmt.executeUpdate();
    l_mapBLOB=cstmt.getBLOB(1);
    }
    instream.close();
    conn.commit();
    rset.close();
    stmt.close();
    conn.close();
    }
    }
    }
     

    二、BLOB值讀取的通用處理:
    這個jdbc標準接口可以直接調用,因此比較簡單,如下所示:
    Connectioncon=ConnectionFactory.getConnection();
    con.setAutoCommit(false);
    Statementst=con.createStatement();
    ResultSetrs=st.executeQuery("selectcontentsfromBLOBIMGwhereid=1");
    if(rs.next()){
    java.sql.Blobblob=rs.getBlob(1);
    InputStreamins=blob.getBinaryStream();
    //輸出到文件
    Filefile=newFile("d:\\output.txt");
    OutputStreamfout=newFileOutputStream(file);
    //下面將BLOB數據寫入文件
    byte[]b=newbyte[1024];
    intlen=0;
    while((len=ins.read(b))!=-1){
    fout.write(b,0,len);
    }
    //依次關閉
    fout.close();
    ins.close();
    }
    con.commit();
    con.close();

    三、BLOB值寫入的通用處理:
     這時要借助于PreparedStatement的動態綁定功能,借用其setObject()方法插入字節流到BLOB字段。
    publicvoidinsertFile(Filef)throwsException{
    FileInputStreamfis=newFileInputStream(f,Connectionconn);
    byte[]buffer=newbyte[1024];
    data=null;
    intsept=0;intlen=0;
    while((sept=fis.read(buffer))!=-1){
    if(data==null){
    len=sept;
    data=buffer;
    }else{
    byte[]temp;
    inttempLength;
    tempLength=len+sept;
    temp=newbyte[tempLength];
    System.arraycopy(data,0,temp,0,len);
    System.arraycopy(buffer,0,temp,len,sept);
    data=temp;
    len=tempLength;
    }
    if(len!=data.length()){
    bytetemp=newbyte[len];
    System.arraycopy(data,0,temp,0,len);
    data=temp;
    }
    }
    Stringsql="insertintofileData(filename,blobData)value(?,?)";
    PreparedStatementps=conn.prepareStatement(sql);
    ps.setString(1,f.getName());
    ps.setObject(2,data);
    ps.executeUpdate();
    }

    四.CLOB讀取的通用處理
    publicstaticStringgetClobString(ResultSetrs,intcol){
    try{
    Clobc=resultSet.getClob(2);
    Readerreader=c.getCharacterStream():
    if(reader==null){
    returnnull;
    }
    StringBuffersb=newStringBuffer();
    char[]charbuf=newchar[4096];
    for(inti=reader.read(charbuf);i>0;i=reader.read(charbuf)){
    sb.append(charbuf,0,i);
    }
    returnsb.toString();
    }catch(Exceptione){
    return"";
    }
    }


    當然還可以直接編寫BLOB存取的存儲過程供JDBC調用,那也非常方便。不過可能要用到外部LOB類型。

    posted @ 2011-11-22 11:31 AthrunWang 閱讀(997) | 評論 (0)編輯 收藏
    win7內存優化【轉】

    減少windows7內存占用的優化方案 (內存占用才285兆 比XP還省)

    具體方法如下:

    控制面板-->管理工具-->服務 
    禁用服務有: 
    HomeGroup Listener(家庭組共享功能,關掉照樣用局域網) 
    HomeGroup Provider(同上) 
    Ip Helper(經常訪問IPv6站點的不要禁) 
    Media Center Extender Service 
    Print Spooler(有打印機的不要禁) 
    Program Compatibility Assistant Service (程序兼容問題的診斷,禁不禁都可) 
    Remote Registry 
    Windows Defender(裝了殺毒軟件的話, 禁用) 
    Windows Error Reporting Service 
    Windows Media Player Network Sharing Service 
    控制面板-->管理工具-->任務計劃程序 
    任務計劃程序庫--Microsoft--Windows--Media Center下 
    禁用的計劃任務有: 
    DispatchRecoverTasks 
    ehDRMinit 
    mcupdate 
    mcupdate_scheduled 
    PeriodicScanRetry 
    RecordingRestart 
    ReindexSearchRoot 
    控制面板-->管理工具-->自動播放 
    取消“為所有媒體和設備使用自動播放”。 
    控制面板-->系統-->高級系統設置(高級) 
    性能-->設置(視覺效果) 
    改為選擇自定義. 
    只勾選以下幾項: 
    平滑滾動列表框 
    平滑屏幕字體邊緣 
    啟用透明玻璃 
    啟用桌面組合 
    顯示半透明的選擇長方形 
    顯示縮略圖,而不是顯示圖標 
    在窗口和按鈕上使用視覺樣式 
    在桌面上為圖標標簽使用陰影 
    注:win7開機時有很多服務是稍后運行的,所以兩三分鐘之后再看內存占用情況

    posted @ 2011-11-18 11:02 AthrunWang 閱讀(522) | 評論 (0)編輯 收藏
    java 寫文件時,輸入換行字符.

    用String   crlf=System.getProperty( "line.separator "),這個crlf就是一個回車換行符,這樣跨OS也不用怕了。不建議用硬編碼如\r\n。

    posted @ 2011-11-18 10:49 AthrunWang 閱讀(152) | 評論 (0)編輯 收藏
    synchronized和java.util.concurrent.locks.Lock的異同

    主要相同點:Lock能完成synchronized所實現的所有功能 .

    主要不同點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。

    posted @ 2011-11-18 10:48 AthrunWang 閱讀(150) | 評論 (0)編輯 收藏
    僅列出標題
    共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
    主站蜘蛛池模板: 亚洲暴爽av人人爽日日碰| 成人免费黄色网址| 亚洲一区二区三区深夜天堂| 亚洲精品国产成人影院| 成人免费男女视频网站慢动作| 99免费精品视频| 黄色免费网址在线观看| 亚洲成年人电影网站| 亚洲精品国产精品乱码在线观看| 国产婷婷高清在线观看免费| 日日麻批免费40分钟日本的| 日韩视频免费在线观看| 成人自慰女黄网站免费大全 | 亚州**色毛片免费观看| 亚洲欧洲日韩国产一区二区三区| 亚洲视频在线观看网站| 亚洲精品无码不卡在线播放HE| 亚洲国产成人久久综合碰| 色视频色露露永久免费观看| 午夜国产精品免费观看| 91在线手机精品免费观看| 久久精品免费电影| 久久一区二区免费播放| 一级特黄aaa大片免费看| 小说专区亚洲春色校园| 久久精品亚洲日本波多野结衣| 亚洲中文字幕久久精品蜜桃| 亚洲欧洲日产韩国在线| 亚洲网址在线观看| 亚洲综合成人网在线观看| 亚洲成av人在线视| 国产亚洲综合成人91精品| 伊人久久大香线蕉亚洲五月天 | 亚洲午夜视频在线观看| 亚洲Av无码精品色午夜| 久久精品国产99精品国产亚洲性色| 亚洲精品乱码久久久久久中文字幕| 中文字幕在亚洲第一在线| 亚洲欧洲美洲无码精品VA| 亚洲精品美女久久久久99| 亚洲一区二区三区夜色|