我正在尝试“在”传入关联请求期间读取(然后存储到第 3 方本地数据库)某些 DICOM 对象标签。
为了接受关联请求并在本地存储我的 dicom 文件,我使用了 dcmrcv() 工具的修改版本。更具体地说,我已经覆盖了 onCStoreRQ 方法,例如:
@Override
protected void onCStoreRQ(Association association, int pcid, DicomObject dcmReqObj,
PDVInputStream dataStream, String transferSyntaxUID,
DicomObject dcmRspObj)
throws DicomServiceException, IOException {
final String classUID = dcmReqObj.getString(Tag.AffectedSOPClassUID);
final String instanceUID = dcmReqObj.getString(Tag.AffectedSOPInstanceUID);
config = new GlobalConfig();
final File associationDir = config.getAssocDirFile();
final String prefixedFileName = instanceUID;
final String dicomFileBaseName = prefixedFileName + DICOM_FILE_EXTENSION;
File dicomFile = new File(associationDir, dicomFileBaseName);
assert !dicomFile.exists();
final BasicDicomObject fileMetaDcmObj = new BasicDicomObject();
fileMetaDcmObj.initFileMetaInformation(classUID, instanceUID, transferSyntaxUID);
final DicomOutputStream outStream = new DicomOutputStream(new BufferedOutputStream(new FileOutputStream(dicomFile), 600000));
//i would like somewhere here to extract some TAGS from incoming dicom object. By trying to do it using dataStream my dicom files
//are getting corrupted!
//System.out.println("StudyInstanceUID: " + dataStream.readDataset().getString(Tag.StudyInstanceUID));
try {
outStream.writeFileMetaInformation(fileMetaDcmObj);
dataStream.copyTo(outStream);
} finally {
outStream.close();
}
dicomFile.renameTo(new File(associationDir, dicomFileBaseName));
System.out.println("DICOM file name: " + dicomFile.getName());
}
@Override
public void associationAccepted(final AssociationAcceptEvent associationAcceptEvent) {
....
@Override
public void associationClosed(final AssociationCloseEvent associationCloseEvent) {
...
}
我想在这段代码之间的某个地方拦截一个方法,该方法将读取 dataStream 并解析特定标签并存储到本地数据库。
但是,无论我在哪里尝试放置一段试图操纵(刚开始阅读)数据流的代码,那么我的 dicom 文件就会损坏!
PDVInputStream 正在实现 java.io.InputStream ....
即使我尝试只放一个:
System.out.println("StudyInstanceUID:" + dataStream.readDataset().getString(Tag.StudyInstanceUID));
在将数据流复制到 outStream 之前...然后我的 dicom 文件已损坏(1KB 大小)...
我应该如何在 CStoreRQ 关联请求中使用数据流来提取一些信息?
我希望我的问题很清楚......