+++ /dev/null
-package javajs.img;
-
-import java.util.zip.CRC32;
-
-
-import javajs.util.AU;
-
-abstract class CRCEncoder extends ImageEncoder {
-
- protected int startPos, bytePos;
-
- private CRC32 crc;
- protected byte[] pngBytes;
- protected int dataLen;
- private byte[] int2 = new byte[2];
- private byte[] int4 = new byte[4];
-
- CRCEncoder() {
- pngBytes = new byte[250];
- crc = new CRC32();
- }
-
- protected void setData(byte[] b, int pt) {
- pngBytes = b;
- dataLen = b.length;
- startPos = bytePos = pt;
- }
-
- protected byte[] getBytes() {
- return (dataLen == pngBytes.length ? pngBytes : AU.arrayCopyByte(
- pngBytes, dataLen));
- }
-
- protected void writeCRC() {
- crc.reset();
- crc.update(pngBytes, startPos, bytePos - startPos);
- writeInt4((int) crc.getValue());
- }
-
- /**
- * Write a two-byte integer into the pngBytes array at a given position.
- *
- * @param n The integer to be written into pngBytes.
- */
- protected void writeInt2(int n) {
- int2[0] = (byte) ((n >> 8) & 0xff);
- int2[1] = (byte) (n & 0xff);
- writeBytes(int2);
- }
-
- /**
- * Write a four-byte integer into the pngBytes array at a given position.
- *
- * @param n The integer to be written into pngBytes.
- */
- protected void writeInt4(int n) {
- getInt4(n, int4);
- writeBytes(int4);
- }
-
- protected static void getInt4(int n, byte[] int4) {
- int4[0] = (byte) ((n >> 24) & 0xff);
- int4[1] = (byte) ((n >> 16) & 0xff);
- int4[2] = (byte) ((n >> 8) & 0xff);
- int4[3] = (byte) (n & 0xff);
- }
-
- /**
- * Write a single byte into the pngBytes array at a given position.
- *
- * @param b The byte to be written into pngBytes.
- */
- protected void writeByte(int b) {
- byte[] temp = {
- (byte) b
- };
- writeBytes(temp);
- }
-
- /**
- * Write a string into the pngBytes array at a given position.
- * This uses the getBytes method, so the encoding used will
- * be its default.
- *
- * @param s The string to be written into pngBytes.
- * @see java.lang.String#getBytes()
- */
- protected void writeString(String s) {
- writeBytes(s.getBytes());
- }
-
- /**
- * Write an array of bytes into the pngBytes array.
- * Both dataLen and bytePos are updated. If we don't have
- * enough room, this is certainly in image data writing,
- * so we add just enough for CRC END CRC
- *
- * @param data
- * The data to be written into pngBytes.
- */
- protected void writeBytes(byte[] data) {
- int newPos = bytePos + data.length;
- dataLen = Math.max(dataLen, newPos);
- if (newPos > pngBytes.length)
- pngBytes = AU.arrayCopyByte(pngBytes, newPos + 16);
- System.arraycopy(data, 0, pngBytes, bytePos, data.length);
- bytePos = newPos;
- }
-
-}