Мне нужно декодировать строки ASN1 из сложной последовательности, но я просто не могу понять, как все это работает. Я бы хотел сделать что-то вроде
decoder = ASN1Library.initWithSequence(sequenceString);
ParseObject obj = decoder.decodeString(asn1String);
Я пробовал несколько библиотек, но ни одна из них не позволяла мне делать то, что я хочу, или я не мог понять, как они работают. Думаю, мне нужно самому реализовать парсер.
Кто-нибудь может объяснить, как это сделать? Большое спасибо!
@GhostCat, ты совершенно прав, мне очень жаль, что я не приложил много усилий, чтобы написать хороший вопрос. Я также редактировал исходный вопрос.
Это лучше, не идеально, но лучше ;-) ... для "идеального" вопроса вы должны обрисовать в общих чертах то, что вам нужно, и что эти библиотеки не предоставляют. Но, по крайней мере, для меня вопрос сейчас "достаточно хорош".




Хорошо, вот что я нашел.
Я использую библиотеку com.objsys.asn1j.runtime; Мне нужно реализовать всю последовательность в классах Java и заставить каждый класс расширять Asn1Seq, Asn1Integer или другие суперклассы из библиотеки.
В каждом классе, который расширяет Asn1Seq (т.е. все классы, подобные Sequence), мне нужно переопределить метод decode, а в теле я должен снова вызвать decode для каждого атрибута класса.
Быстрый пример (и Type1, и Type2 расширяют Asn1Integer):
class SeqData extends Asn1Seq {
private static final long serialVersionUID = 55L;
Type1 attribute1;
Type2 attribute2;
@Override
public int getElementCount() {
return 2;
}
@Override
public String getElementName(int arg0) {
switch (arg0) {
case 0:
return "attribute1";
case 1:
return "attribute2";
}
return "";
}
@Override
public Object getElementValue(int arg0) {
switch (arg0) {
case 0:
return attribute1;
case 1:
return attribute2;
}
return null;
}
@Override
public void decode(Asn1PerDecodeBuffer arg0) throws Asn1Exception, IOException {
attribute1 = new Type1();
attribute1.decode(arg0, 1L, 62L);
attribute2 = new Type2();
attribute2.decode(arg0, 1L, 62L);
}
Такие просьбы здесь не по теме.