#java #exception #bouncycastle #asn.1 #decoder
Вопрос:
Он dat file
извлекается. В нем содержится много данных. Однако некоторые данные публикуются без проблем, в то время как другие указывают на ошибки.
Вот мой код
public void Decode(File filePath) {
byte[] blockBuffer = new byte[0x800];
ASN1InputStream bIn;
ASN1Primitive obj;
try {
FileInputStream fileInput = new FileInputStream(filePath);
notFound = false;
String checkFileSql = "SELECT count(*) AS cnt FROM table_name WHERE filename=?";
PreparedStatement checkStmt = conn.prepareStatement(checkFileSql);
checkStmt.setString(1, filePath.getName());
ResultSet rs = checkStmt.executeQuery();
if (rs.next()) {
if (rs.getInt("cnt") == 0) {
isExist = false;
String insertSql = "INSERT..."
stmt = conn.prepareStatement(insertSql);
while (fileInput.available() > 0) {
if (fileInput.read(blockBuffer) > 0) {
bIn = new ASN1InputStream(blockBuffer);
boolean endOfBlock = false;
while (bIn.available() > 4 amp;amp; !endOfBlock) {
if (bIn.markSupported()) {
bIn.mark(4);
if (bIn.read() == 0xff amp;amp; bIn.read() == 0xff amp;amp; bIn.read() == 0xff
amp;amp; bIn.read() == 0xff) {
endOfBlock = true;
}
bIn.reset();
if (!endOfBlock) {
obj = (ASN1Primitive) bIn.readObject();
Record cr = new Record();
cr.parseObject(obj);
if (cr.cdrType != null) {
if (cr.cdrType == cr.pgwCDR || cr.cdrType == cr.sgwCDR) {
}
}
}
}
}
}
}
int[] rslt = stmt.executeBatch();
for (int i = 0; i < rslt.length; i ) {
inserted = rslt[i];
}
conn.commit();
stmt.close();
fileInput.close();
} else {
isExist = true;
}
}
rs.close();
checkStmt.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
exceptionStr = e.getMessage();
e.printStackTrace();
}
}
Сообщение об ошибке
Ява.Ио.EOFException: длина деф объект 224 усе на 90 в орг.после установки BouncyCastle.является asn1.DefiniteLengthInputStream.читать(неизвестный источник) на орг.после установки BouncyCastle.утиль.Ио.Потоки.readFully(неизвестный источник) на орг.после установки BouncyCastle.утиль.Ио.Потоки.readFully(неизвестный источник) на орг.после установки BouncyCastle.является asn1.DefiniteLengthInputStream.toByteArray(неизвестный источник) на орг.после установки BouncyCastle.является asn1.ASN1StreamParser.readTaggedObject(неизвестный источник) на орг.после установки BouncyCastle.является asn1.BERTaggedObjectParser.getLoadedObject(неизвестный источник) на орг.после установки BouncyCastle.является asn1.ASN1StreamParser.readVector(неизвестный источник) на орг.bouncycastle.asn1.ASN1StreamParser.readTaggedObject(Неизвестный источник) в org.bouncycastle.asn1.ASN1InputStream.buildObject(Неизвестный источник) в org.bouncycastle.asn1.ASN1InputStream.readObject(Неизвестный источник)
Вот анализ кода данных
public void parseObject(ASN1Primitive obj) {
if (obj instanceof DERTaggedObject) {
DERTaggedObject.getInstance(obj);
DERTaggedObject cdrObj = (DERTaggedObject) DERTaggedObject.getInstance(obj);
cdrType = cdrObj.getTagNo();
if (cdrObj.getObject() instanceof DLSequence) {
DLSequence callModule = (DLSequence) DLSequence.getInstance(cdrObj.getObject());
for (int i = 0; i < callModule.size(); i ) {
if (callModule.getObjectAt(i) instanceof DERTaggedObject) {
DERTaggedObject eventModule = (DERTaggedObject) DERTaggedObject
.getInstance(callModule.getObjectAt(i));
int tag = eventModule.getTagNo();
distValues(cdrType, tag, eventModule);
}
}
}
}
}
Строка, указывающая на сообщение об ошибке
obj = (ASN1Primitive) bIn.readObject();
Комментарии:
1. Пожалуйста, опубликуйте полную трассировку стека
2. Мы не знаем, что в файле и что вы пытаетесь сделать. В любом случае, я не понимаю , как этот код может выполняться там, где вы утверждаете, потому
ASN1InputStream
что не поддерживаетmark()
, поэтомуbIn.markSupported()
всегда будет возвращать false.