SignFileOutputStream.java 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package vn.hongyegroup.yybusiness.widget.signWrite;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.util.Random;
  6. /**
  7. * Created by guado on 2018/3/5.
  8. */
  9. public class SignFileOutputStream extends FileOutputStream {
  10. byte[] BYTE_MAP;
  11. public SignFileOutputStream(String name) throws IOException {
  12. this(new File(name));
  13. }
  14. public SignFileOutputStream(File file) throws IOException {
  15. super(file);
  16. BYTE_MAP = new byte[256];
  17. for (int i = 0; i < 256; i++) {
  18. BYTE_MAP[i] = (byte) i;
  19. }
  20. Random random = new Random();
  21. for (int i = 0; i < BYTE_MAP.length; i++) {
  22. int p = random.nextInt(256);
  23. byte b = BYTE_MAP[i];
  24. BYTE_MAP[i] = BYTE_MAP[p];
  25. BYTE_MAP[p] = b;
  26. }
  27. //write magic num
  28. super.write(new byte[]{0x1A, 0x2A}, 0, 2);
  29. super.write(BYTE_MAP, 0, 256);
  30. }
  31. @Override
  32. public void write(byte[] b, int off, int len) throws IOException {
  33. for (int i = off; i < off + len; i++) {
  34. b[i] = BYTE_MAP[b[i] & 0xFF];
  35. }
  36. super.write(b, off, len);
  37. }
  38. }