private void transcodeAttribute(DicomInputStream in)
throws IOException
{
final int tag = in.tag();
final VR vr = in.vr();
final int vallen = in.valueLength();
final DicomObject attrs = in.getDicomObject();
if (vallen == -1 || vr == VR.SQ) {
out.writeHeader(tag, vr, -1);
TransferSyntax prevTS = out.getTransferSyntax();
if (vr == VR.UN) {
out.setTransferSyntax(TransferSyntax.ImplicitVRLittleEndian);
}
in.readValue(in);
attrs.remove(tag);
out.writeHeader(Tag.SequenceDelimitationItem, null, 0);
out.setTransferSyntax(prevTS);
} else if (!TagUtils.isGroupLengthElement(tag)) {
out.writeHeader(tag, vr, vallen);
if (tag == Tag.SpecificCharacterSet
|| TagUtils.isPrivateCreatorDataElement(tag)) {
byte[] val = in.readBytes(vallen);
boolean bigEndian = in.getTransferSyntax().bigEndian();
attrs.putBytes(tag, vr, val, bigEndian);
out.write(val);
} else {
transcodeValue(in, vr);
}
}
}