23.07.2013 Views

Java IO.pdf - Nguyen Dang Binh

Java IO.pdf - Nguyen Dang Binh

Java IO.pdf - Nguyen Dang Binh

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

public class EasyDigestOutputStream extends FilterOutputStream {<br />

private boolean on = true;<br />

private boolean closed = false;<br />

protected byte[] result = null;<br />

protected MessageDigest digest;<br />

public EasyDigestOutputStream(OutputStream out, String algorithm)<br />

throws NoSuchAlgorithmException {<br />

super(out);<br />

digest = MessageDigest.getInstance(algorithm);<br />

}<br />

public EasyDigestOutputStream(OutputStream out, String algorithm,<br />

String provider) throws NoSuchAlgorithmException,<br />

NoSuchProviderException {<br />

super(out);<br />

digest = MessageDigest.getInstance(algorithm, provider);<br />

}<br />

{<br />

}<br />

public void write(int b) throws <strong>IO</strong>Exception {<br />

if (on) digest.update((byte)b);<br />

out.write(b);<br />

}<br />

<strong>Java</strong> I/O<br />

public void write(byte[] data, int offset, int length) throws <strong>IO</strong>Exception<br />

}<br />

if (on) digest.update(data, offset, length);<br />

out.write(data, offset, length);<br />

public void on(boolean on) {<br />

this.on = on;<br />

}<br />

public void close() throws <strong>IO</strong>Exception {<br />

out.close();<br />

result = digest.digest();<br />

closed = true;<br />

}<br />

public byte[] getDigest() {<br />

return result;<br />

}<br />

Example 10.5 is similar to the FileDigest of Example 10.3 rewritten to use the<br />

EasyDigestOutputStream. This program produces the same digests as Example 10.3, but it's<br />

quite a bit shorter and doesn't require any explicit mucking around with MessageDigest<br />

objects. That's all hidden inside the EasyDigestOutputStream class.<br />

Example 10.5. EasyFileDigest<br />

import java.net.*;<br />

import java.io.*;<br />

import com.macfaq.security.*;<br />

import com.macfaq.io.*;<br />

208

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!