खोज…


डाउनलोड / लागू करें

नवीनतम जार डाउनलोड करें या मावेन के माध्यम से पकड़ो:

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

या ग्रेडेल:

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

पीएनजी डिकोडर

एक 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);
  }
}

बाइटस्ट्रीम और बफर

बाइटस्ट्रीम और बफर

Okio को दो प्रकारों के साथ बनाया गया है जो बहुत सी क्षमता को एक सीधा API में पैक करते हैं:

बाइटस्ट्रिंग बाइट्स का एक अपरिवर्तनीय अनुक्रम है। चरित्र डेटा के लिए, स्ट्रिंग मौलिक है। बाइटस्ट्रिंग स्ट्रिंग के लंबे समय से खोए हुए भाई हैं, जिससे बाइनरी डेटा को एक मूल्य के रूप में व्यवहार करना आसान हो जाता है। यह वर्ग एर्गोनोमिक है: यह जानता है कि कैसे अपने आप को हेक्स, बेस 64 और यूटीएफ -8 के रूप में एनकोड और डीकोड करना है।

बफ़र बाइट्स का एक परिवर्तनशील अनुक्रम है। ArrayList की तरह, आपको अपने बफर को पहले से आकार देने की आवश्यकता नहीं है। आप एक पंक्ति के रूप में बफ़र्स पढ़ते हैं और लिखते हैं: अंत तक डेटा लिखें और इसे सामने से पढ़ें। पदों, सीमाओं, या क्षमताओं का प्रबंधन करने के लिए कोई दायित्व नहीं है।

आंतरिक रूप से, ByteString और Buffer सीपीयू और मेमोरी को बचाने के लिए कुछ चतुर चीजें करते हैं। यदि आप एक UTF-8 स्ट्रिंग को बाइटस्ट्रिंग के रूप में एनकोड करते हैं, तो यह उस स्ट्रिंग के संदर्भ को कैश करता है ताकि यदि आप इसे बाद में डिकोड करते हैं, तो कोई काम नहीं करना है।

Buffer को सेगमेंट की लिंक की गई सूची के रूप में कार्यान्वित किया जाता है। जब आप डेटा को एक बफ़र से दूसरे में ले जाते हैं, तो यह डेटा को कॉपी करने के बजाय सेगमेंट के स्वामित्व को पुन: असाइन करता है। यह दृष्टिकोण विशेष रूप से बहु-स्तरीय कार्यक्रमों के लिए सहायक है: एक थ्रेड जो नेटवर्क से बात करता है वह किसी भी प्रतिलिपि या समारोह के बिना कार्यकर्ता थ्रेड के साथ डेटा का आदान-प्रदान कर सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow