سؤال

لدي سلسلة Base64 تم ضغطها بواسطة gzipp في .NET وأرغب في تحويلها مرة أخرى إلى سلسلة في Java.أنا أبحث عن بعض مرادفات Java لبناء جملة C#، على وجه الخصوص:

  • تحويل. من Base64String
  • دفق الذاكرة
  • GZipStream

إليك الطريقة التي أرغب في تحويلها:

public static string Decompress(string zipText) {
    byte[] gzipBuff = Convert.FromBase64String(zipText);

    using (MemoryStream memstream = new MemoryStream())
    {
        int msgLength = BitConverter.ToInt32(gzipBuff, 0);
        memstream.Write(gzipBuff, 4, gzipBuff.Length - 4);

        byte[] buffer = new byte[msgLength];

        memstream.Position = 0;
        using (GZipStream gzip = new GZipStream(memstream, CompressionMode.Decompress))
        {
            gzip.Read(buffer, 0, buffer.Length);
        }
        return Encoding.UTF8.GetString(buffer);
     }
}

هي موضع تقدير أي مؤشرات.

هل كانت مفيدة؟

المحلول

بالنسبة لـ Base64، لديك Base64 فصل من أباتشي كومنز، و decodeBase64 الطريقة التي تأخذ أ String ويعود أ byte[].

ومن ثم يمكنك قراءة النتيجة byte[] الى ByteArrayInputStream.وأخيرا، تمرير ByteArrayInputStream إلى أ GZipInputStream وقراءة البايتات غير المضغوطة.


يبدو الرمز وكأنه شيء على هذا المنوال:

public static String Decompress(String zipText) throws IOException {
    byte[] gzipBuff = Base64.decodeBase64(zipText);

    ByteArrayInputStream memstream = new ByteArrayInputStream(gzipBuff);
    GZIPInputStream gzin = new GZIPInputStream(memstream);

    final int buffSize = 8192;
    byte[] tempBuffer = new byte[buffSize ];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    while ((size = gzin.read(tempBuffer, 0, buffSize)) != -1) {
        baos.write(tempBuffer, 0, size);
    }        
    byte[] buffer = baos.toByteArray();
    baos.close();

    return new String(buffer, "UTF-8");
}

لم أختبر الكود، ولكن أعتقد أنه يجب أن يعمل، ربما مع بعض التعديلات.

نصائح أخرى

بالنسبة لـ Base64 أنصحك به تنفيذ iHolder.

GZipinputStream هو ما تحتاجه لفك ضغط مجموعة بايت GZip.

ByteArrayOutputStream هو ما تستخدمه لكتابة البايتات إلى الذاكرة.يمكنك بعد ذلك الحصول على البايتات وتمريرها إلى منشئ كائن السلسلة لتحويلها، ويفضل تحديد التشفير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top