2012-05-04 2 views
3

Я работаю над проектом выравнивания белков ДНК «readseq». Его пакет «flybase» содержит код Java, имеющий класс «charToByteConverter», который не компилируется и не дает сообщение типа «устаревшее». (Http://iubio.bio.indiana.edu/soft/molbio/readseq/java/). Here readseq source can be found Мне нужно добавить еще несколько функций в это приложение, не знаю, как исправить это, чтобы перейти к моей цели. Я - своего рода новый bie в java. Plz поможет, если это возможно. Readseq с его gui легко доступен в сети. Он просто преобразует массив заданных символов в байты. Вот некоторая информация об этом: (docjar.com/docs/api/sun/io/CharToByteConverter.html). Я не знаю, что делать с этим. Это абстрактный класс, используемый как в:Java Class 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

Если ОП не знает Java, ни один ответ не поможет ему, кроме полного кода для замены текущего. Мой совет: изучить Java. Программирование на Java без знания Java - верный путь к катастрофе. –

+1

Концептуально я склонен согласиться с тобой. Хотя можно утверждать, что если к проблеме подойти очень конкретно, используя подход, основанный на TDD, который ограничивает задачу, чтобы конкретно 1) сделать интерфейс, 2) сделать класс, 3) импортировать ваш класс и использовать другой объект, это другая и более простая задача обучения, чем «перейти на изучение Java и пакета NIO. Попробуйте еще раз через 2 месяца». Современные методы программирования могут дать нам способы, чтобы наши языки программирования соответствовали тому, как наши умы хотят, чтобы они работали, вместо того, чтобы бить наш разум вокруг языка программирования. –

1

Это идеальный случай для Adapt Parameter, от Michael Feathers book Working Effectively With Legacy Code.

Бесстыдная самозарядная: Вот short prezi I did on it. Это пошаговое разбиение того, что вам нужно сделать.

По существу, вам придется изменить код, который у вас есть, и применить параметр Adapter Pattern к параметру. Вы хотите определить свой собственный интерфейс (давайте назовем его ByteSource), сделайте вместо этого getBytes() (getBytes(ByteSource ctb)), затем сделайте адаптер, который внутренне имеет CharToByteConverter для тестирования. Чтобы исправить сломанную библиотеку, вы должны сделать тот, у которого есть java.nio.charset.

+0

ok сэр. Дай мне попробовать. Еще раз спасибо. – Martin

2

Altough sun.io.CharToByteConverter имеет @Deprecated аннотация его все еще существует в Java 1.7. Составьте свой код с аргументом -Xlint:deprecation и отбросьте предупреждающее сообщение.

Если вы компилируете с затмением:

  • свойства Open Project и найдите Java Compiler -> Ошибки/предупреждения Tab Под Устаревшие и ограниченный API раздел

  • найти Запретить ссылку (правило доступа) установить и изменить его значение от Ошибка до Предупреждение

  • Компиляция проекта

enter image description here

+0

Ах, страусиный алгоритм. Это самое простое решение, хотя оно учит людей глупо обращаться с кодом. –

+0

oh спасибо, сэр. но я работаю в eclipse и не знаю, как скомпилировать с -Xliint: debrecation. Не могли бы вы мне помочь и там. – Martin

+0

Надеюсь, что измененный ответ поможет вам скомпилировать проект. – ozhan

Смежные вопросы