2012-05-04 37 views
3

我正在研究DNA蛋白質對齊項目「readseq」。其「flybase」包中包含具有「charToByteConverter」類的java代碼,該類不會編譯並且提供「類型已棄用」消息。 (http://iubio.bio.indiana.edu/soft/molbio/readseq/java/)。 Here readseq source can be found我需要在此應用程序中添加更多功能,不知道如何解決它以實現我的目標。我在java中是一種新的bie。如果可能,請提供幫助。 Readseq與它的gui很容易上網。 它只是將給定字符的數組轉換爲字節。以下是關於它的一些信息:(docjar.com/docs/api/sun/io/CharToByteConverter.html)。我不知道該如何處理這個被棄用的問題。 它是用來作爲下一個抽象類:Java類chartobyteconverter類型不建議使用

protected byte[] getBytes(CharToByteConverter ctb) { 
     ctb.reset(); 
     int estLength = ctb.getMaxBytesPerChar() * count; 
     byte[] result = new byte[estLength]; 
     int length; 

     try { 
      length = ctb.convert(value, offset, offset + count, 
        result, 0, estLength); 
      length += ctb.flush(result, ctb.nextByteIndex(), estLength); 
     } catch (CharConversionException e) { 
      length = ctb.nextByteIndex(); 
     } 

     if (length < estLength) { 
      // A short format was used: Trim the byte array. 
      byte[] trimResult = new byte[length]; 
      System.arraycopy(result, 0, trimResult, 0, length); 
      return trimResult; 
     } 
     else { 
      return result; 
     } 
} 
+0

什麼是 「CharToByteConverter的」 做什麼呢?我想這不僅僅是從Java字符轉換爲Java字節...... –

+0

它只是將給定字符的數組轉換爲字節。以下是關於它的一些信息:(http://www.docjar.com/docs/api/sun/io/CharToByteConverter.html)。我不知道該如何處理這個被棄用的問題。 – Martin

回答

3

javadoc註釋說明了一切:

已過時!替換 - java.nio.charset

查找java.nio.charset包中的替換類/方法。

請注意,使用JDK中不屬於正式記錄的API的類首先是個壞主意。

+1

看來,這個自我報告不知道Java的人一直負責擴展遺留庫。雖然這個建議是「最低限度正確的」,但對於如何完成這項任務並沒有提供很多指導。 –

+1

如果OP不知道Java,除了替換當前代碼的完整代碼外,沒有答案會幫助他。我的建議是:學習Java。在沒有了解Java的情況下用Java進行編程是一個可靠的途徑。 –

+1

從概念上講,我傾向於同意你的看法。雖然人們可以爭辯說,如果問題得到了非常明確的處理,那麼使用TDD驅動的方法可以把任務範圍縮小爲:1)創建一個接口,2)創建一個類,3)讓你的類導入並使用另一個對象,這是與「去學習Java和NIO軟件包,在2個月內再試一次」不同而且更簡單的學習任務。現代編程技術可以讓我們使我們的編程語言符合我們的思想想要他們工作的方式,而不必在編程語言中打動我們的頭腦。 –

1

這是來自Michael Feathers的書Working Effectively With Legacy CodeAdapt Parameter的完美案例。

無恥的自我插件:這是一個short prezi I did on it。它有你需要做的一步一步的細分。

本質上,您將不得不修改您的代碼並將Adapter Pattern應用於該參數。你需要定義你自己的接口(我們稱之爲ByteSource),使getBytes()代替你的接口(getBytes(ByteSource ctb)),然後使內部具有CharToByteConverter的適配器進行測試。要修復損壞的庫,您應該創建一個具有java.nio.charset的庫。

+0

好的,先生。讓我嘗試。再次感謝。 – Martin

2

Altough sun.io.CharToByteConverter has @Deprecated註解它仍然存在於Java 1.7中。 用-Xlint:deprecation參數編譯您的代碼並放棄警告消息。

如果你使用Eclipse編譯:

  • 打開項目性質和定位Java編譯器 - >錯誤/警告選項卡下的已過時和受限制的API部分

  • 找到禁止參考(訪問規則)設置並將其值從錯誤改爲警告

  • 編譯項目

enter image description here

+0

啊,鴕鳥算法。這是最簡單的解決方案,儘管它教人們愚蠢地處理代碼。 –

+0

哦謝謝先生。但我在eclipse中工作,不知道如何用-Xliint:deprecation進行編譯。你能幫我嗎? – Martin

+0

希望修改後的答案有助於您編譯項目。 – ozhan