كيف يمكنك توجيه تدفق الإدخال إلى ملف مضغوط أثناء قراءته باستخدام Java؟

StackOverflow https://stackoverflow.com/questions/137645

  •  02-07-2019
  •  | 
  •  

سؤال

أرغب في تنفيذ برنامج وأثناء تشغيله، اقرأ مخرجاته وأخرج المخرجات إلى ملف مضغوط.يمكن أن يكون ناتج البرنامج كبيرًا جدًا، لذا فإن الفكرة هي عدم الاحتفاظ بالكثير من الذاكرة - فقط إرساله إلى ملف مضغوط كما أحصل عليه.

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

المحلول

ZipOutputStream targetStream = new ZipOutputStream(fileToSaveTo);
ZipEntry entry = new ZipEntry(nameOfFileInZipFile);
targetStream.putNextEntry(entry);

byte[] dataBlock = new byte[1024];
int count = inputStream.read(dataBlock, 0, 1024);
while (count != -1) {
    targetStream.write(dataBlock, 0, count);
    count = inputStream.read(dataBlock, 0, 1024);
}

بعبارة أخرى:

  1. يمكنك إنشاء ZipOutputStream، وإعطائه الملف الذي تريد الكتابة إليه.
  2. يمكنك إنشاء ZipEntry، الذي يشكل ملفًا داخل هذا الملف المضغوط.أي.عندما تفتح myFile.zip، ويوجد هناك 3 ملفات، كل ملف هو ZipEntry.

  3. يمكنك وضع هذا zipEntry في ZipOutputStream الخاص بك

  4. قم بإنشاء مخزن مؤقت للبايت لقراءة بياناتك فيه.
  5. اقرأ من inputStream الخاص بك إلى المخزن المؤقت للبايت الخاص بك، وتذكر العدد.
  6. على الرغم من أن العدد ليس -1، فاكتب هذا البايت إلى ملف zipStream الخاص بك.
  7. اقرأ السطر التالي.

أغلق التدفقات الخاصة بك عند الانتهاء.لفها بالطريقة التي تراها مناسبة.

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