DICOM Image I/O plugin
Reading a dicom file (simple case)
BufferedImage image = ImageIO.read(new File("image.dcm"));
Reading a dicom file (with attribute retrieval)
Iterator readers = ImageIO.getImageReadersByFormatName("dicom");
DicomReader reader = (DicomReader)readers.next();
reader.setInput(new FileImageInputStream(new File("image.dcm")));
DicomMetadata dmd = reader.getDicomMetadata();
BufferedImage image = reader.read(0);
String patient_id = dmd.getAttributeString(Tag.PatientID);
Writing a dicom file (simple case)
ImageIO.write(image, "dicom", new File("image.dcm"));
Writing a dicom file (specifying attributes)
Iterator writers = ImageIO.getImageWritersByFormatName("dicom");
ImageWriter writer = (ImageWriter) writers.next();
DicomMetadata dmd = new DicomMetadata();
dmd.setModality("NM");
dmd.setAttribute(Tag.PatientID, 12345);
File file = new File("image.dcm");
file.delete();
writer.setOutput(new FileImageOutputStream(file));
writer.write(dmd, new IIOImage(image, null, null), null);
Receiving a dicom object from the network (synchronous listening)
Iterator readers = ImageIO.getImageReadersByFormatName("dicom");
ImageReader reader = (ImageReader)readers.next();
reader.setInput(new StorageSCP());
BufferedImage image = reader.read(0);
Receiving a dicom object from the network (asynchronous listening)
Iterator readers = ImageIO.getImageReadersByFormatName("dicom");
final ImageReader reader = (ImageReader)readers.next();

class Listener implements StorageSCPListener {
  public void objectReceived(ReceivedObject o) {
    reader.setInput(o);
    BufferedImage image = reader.read(0);
    /* ... */
  }
}

new StorageSCP(new Listener()).start();
Sending a dicom object through the network
Iterator writers = ImageIO.getImageWritersByFormatName("dicom");
ImageWriter writer = (ImageWriter)writers.next();
PeerAE peer = new PeerAE(InetAddress.getByName("server.hospital.com"), "TEST AE");
writer.setOutput(peer);
writer.write(image);
Querying a remote image database and retrieving an object
Iterator readers = ImageIO.getImageReadersByFormatName("dicom");
DicomReader reader = (DicomReader)readers.next();
PeerAE peer = new PeerAE(InetAddress.getByName("server.hospital.com"), "TEST AE");
QueryRetrieveSCU scu = new QueryRetrieveSCU(peer);
Identifier query = new Identifier(Identifier.MODEL_PATIENT_ROOT, Identifier.LEVEL_IMAGE);
query.setAttribute(Tag.PatientID, 1234);
query.setAttribute(Tag.StudyInstanceUID, "*");
query.setAttribute(Tag.SeriesInstanceUID, "*");
Iterator founds = scu.find(query);
while (founds.hasNext()) { 
  Identifier id = (Identifier) founds.next();
  Iterator retrieved = scu.get(id);
  while (retrieved.hasNext()) {
    ReceivedObject ro = (ReceivedObject) it.next();
    reader.setInput(ro);
    BufferedImage image = reader.read(0);
    /* ... */
  }
}

Complete example codes are available in the examples directory of the downloadable archive.