if (truncated) result += "\n ...data dump truncated at 4M...";
if (truncated) result += "\n ...data dump truncated at " + MAX_DUMP + "bytes...";
	String dataHexDump(String lineDelimiter) {		if (image == null) return "";		boolean truncated = false;		char[] dump = null;		try {			dump = new char[imageData.height * (6 + 3 * imageData.bytesPerLine + lineDelimiter.length())];		} catch (OutOfMemoryError e) {			/* Too much data to dump - truncate at 4M. */			dump = new char[4 * 1024 * 1024];			truncated = true;		}		int index = 0;		try {			for (int i = 0; i < imageData.data.length; i++) {				if (i % imageData.bytesPerLine == 0) {					int line = i / imageData.bytesPerLine;					dump[index++] = Character.forDigit(line / 1000 % 10, 10);					dump[index++] = Character.forDigit(line / 100 % 10, 10);					dump[index++] = Character.forDigit(line / 10 % 10, 10);					dump[index++] = Character.forDigit(line % 10, 10);					dump[index++] = ':';					dump[index++] = ' ';				}				byte b = imageData.data[i];				dump[index++] = Character.forDigit((b & 0xF0) >> 4, 16);				dump[index++] = Character.forDigit(b & 0x0F, 16);				dump[index++] = ' ';				if ((i + 1) % imageData.bytesPerLine == 0) {					dump[index++] = lineDelimiter.charAt(0);					if (lineDelimiter.length() > 1)						dump[index++] = lineDelimiter.charAt(1);				}			}		} catch (IndexOutOfBoundsException e) {}		String result = "";		try {			result = new String(dump);		} catch (OutOfMemoryError e) {			/* Too much data to display in the text widget - truncate at 4M. */			result = new String(dump, 0, 4 * 1024 * 1024);			truncated = true;		}		if (truncated) result += "\n ...data dump truncated at 4M...";		return result;	}