수색…


다운로드 / 구현

최신 JAR을 다운로드하거나 메이븐을 통해 잡으십시오 :

<dependency>
    <groupId>com.squareup.okio</groupId>
    <artifactId>okio</artifactId>
    <version>1.12.0</version>
</dependency>

또는 Gradle :

compile 'com.squareup.okio:okio:1.12.0'

PNG 디코더

PNG 파일의 청크를 디코딩하면 실제로 Okio를 보여줍니다.

private static final ByteString PNG_HEADER = ByteString.decodeHex("89504e470d0a1a0a");

public void decodePng(InputStream in) throws IOException {
  try (BufferedSource pngSource = Okio.buffer(Okio.source(in))) {
    ByteString header = pngSource.readByteString(PNG_HEADER.size());
    if (!header.equals(PNG_HEADER)) {
      throw new IOException("Not a PNG.");
    }

    while (true) {
      Buffer chunk = new Buffer();

      // Each chunk is a length, type, data, and CRC offset.
      int length = pngSource.readInt();
      String type = pngSource.readUtf8(4);
      pngSource.readFully(chunk, length);
      int crc = pngSource.readInt();

      decodeChunk(type, chunk);
      if (type.equals("IEND")) break;
    }
  }
}

private void decodeChunk(String type, Buffer chunk) {
  if (type.equals("IHDR")) {
    int width = chunk.readInt();
    int height = chunk.readInt();
    System.out.printf("%08x: %s %d x %d%n", chunk.size(), type, width, height);
  } else {
    System.out.printf("%08x: %s%n", chunk.size(), type);
  }
}

ByteStrings 및 버퍼

ByteStrings 및 버퍼

Okio는 많은 기능을 간단한 API에 포함시키는 두 가지 유형으로 만들어졌습니다.

ByteString 은 불변의 바이트 순서입니다. 문자 데이터의 경우 String이 기본입니다. ByteString은 문자열의 오랜 형제이기 때문에 이진 데이터를 값으로 쉽게 처리 할 수 ​​있습니다. 이 클래스는 인체 공학적입니다 : 16 진수, 16 진수 및 16 진수로 인코딩 및 디코딩하는 방법을 알고 있습니다.

버퍼 는 변경 가능한 일련의 바이트입니다. ArrayList와 마찬가지로 미리 버퍼 크기를 조정할 필요가 없습니다. 버퍼를 읽고 대기열로 쓰고 마지막에 데이터를 쓰고 앞에서 읽습니다. 포지션, 한도 또는 역량을 관리 할 의무는 없습니다.

내부적으로 ByteStringBuffer 는 CPU와 메모리를 절약하기 위해 영리한 일을합니다. UTF-8 문자열을 ByteString으로 인코딩하면 해당 문자열에 대한 참조가 캐시되므로 나중에 디코딩하면 수행 할 작업이 없습니다.

Buffer 는 세그먼트의 연결된 목록으로 구현됩니다. 한 버퍼에서 다른 버퍼로 데이터를 이동하면 데이터를 복사하는 것이 아니라 세그먼트의 소유권을 다시 할당합니다. 이 접근법은 특히 다중 스레드 프로그램에 유용합니다. 네트워크와 통신하는 스레드는 복사 또는 의식없이 작업자 스레드와 데이터를 교환 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow