Exemplo n.º 1
0
  // Test for [JACKSON-631]
  public void testBase64Text() throws Exception {
    // let's actually iterate over sets of encoding modes, lengths

    final int[] LENS = {1, 2, 3, 4, 7, 9, 32, 33, 34, 35};
    final Base64Variant[] VARIANTS = {
      Base64Variants.MIME,
      Base64Variants.MIME_NO_LINEFEEDS,
      Base64Variants.MODIFIED_FOR_URL,
      Base64Variants.PEM
    };

    for (int len : LENS) {
      byte[] input = new byte[len];
      for (int i = 0; i < input.length; ++i) {
        input[i] = (byte) i;
      }
      for (Base64Variant variant : VARIANTS) {
        TextNode n = new TextNode(variant.encode(input));
        byte[] data = null;
        try {
          data = n.getBinaryValue(variant);
        } catch (Exception e) {
          throw new IOException(
              "Failed (variant " + variant + ", data length " + len + "): " + e.getMessage());
        }
        assertNotNull(data);
        assertArrayEquals(data, input);
      }
    }
  }
  @Override
  public void writeBinary(Base64Variant b64variant, byte[] data, int offset, int len)
      throws IOException, JsonGenerationException {
    if (data == null) {
      writeNull();
      return;
    }
    _verifyValueWrite("write Binary value");
    if (!_skipValue) {
      // ok, better just Base64 encode as a String...
      if (offset > 0 || (offset + len) != data.length) {
        data = Arrays.copyOfRange(data, offset, offset + len);
      }
      String encoded = b64variant.encode(data);

      if (_arraySeparator >= 0) {
        _addToArray(encoded);
      } else {
        _writer.write(_columnIndex(), encoded);
      }
    }
  }