سؤال

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

رمز المثال الخاص بي:

File fileToChange = new File("someimage.jpg");

byte[] i = new byte[2];
i[0] = (byte)Integer.decode("0xcc");
i[1] = (byte)Integer.decode("0xcc");

RandomAccessFile f = 
    new RandomAccessFile(new File("videothing.jpg"), "rw");
long aPositionWhereIWantToGo = 2;
f.seek(aPositionWhereIWantToGo); // this basically reads n bytes in the file
f.write((byte[])i);
f.close();

لذلك هذا لا يعمل لأنه يبتلع، ولا يدخل، لا يمكنني العثور على أي وسيلة لإدراج البيانات فقط في ملف

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

المحلول

ستحتاج إلى استخدام الإخراج والمبوتات في جنبا إلى جنب. اقرأ الملف باستخدام InputStream والكتابة أولا 2 بايت من الملف الأصلي. أدخل المحتوى السداسي عشري ثم اقرأ بقية دفق الإدخال والكتابة إلى الإخراج.

طريقة لاستخدامها في القراءة:

public int read(byte b[], int off, int len)

طريقة لاستخدامها في الكتابة:

public void write(byte b[], int off, int len) 

نصائح أخرى

أعد كتابة نسخة من الملف إدراج البيانات فيها في المكان المطلوب. أو اكتب OutputStream يؤدي ذلك إلى ضخ البيانات إذا كنت ترغب في القيام بذلك أثناء الإرسال، على سبيل المثال، استجابة HTTP.

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