عند قراءة دفق الملفات ، يتم مواجهته غالبًا ما يكون ذلك هو المدى الرئيسي للمشاكل التي تسببها تشفير الملفات. أولاً ، من الواضح أن المفاهيم والاختلافات بين الملفات النصية والملفات الثنائية.
الملفات النصية هي الملفات القائمة على الأحرف. تعتمد الملفات الثنائية على ملفات الترميز المستندة إلى القيمة.
لذلك ، يمكن ملاحظة أن الملف النصي مشفر بشكل أساسي (هناك أيضًا رموز غير مثبتة مثل UTF-8). ويمكن رؤية الملفات الثنائية على أنها مشفرة طويلة ، لأنها ترميز قيمة ، كم عدد اللدغات التي تمثل قيمة ، والتي تحددها من قبلك.
بالنسبة للملفات الثنائية ، يجب ألا تستخدم سلسلة ، لأن السلسلة ستستخدم الترميز الافتراضي للنظام عندما يمكن قراءة السلسلة إلى التهيئة.
بالنسبة للملفات النصية ، نظرًا لأن الترميز يتم إصلاحه ، طالما قمت بقراءة الملف ، استخدم الملف نفسه لتحليل الملف ، ثم الحصول على البايت. . على الرغم من أن الملفات الثنائية يمكن أن تحصل أيضًا على تنسيق ترميز النص ، إلا أنها غير دقيقة ، لذلك لا يمكن قولها في نفس الوقت.
العملية المحددة هي كما يلي:
1) احصل على تنسيق الملف النصي
سلسلة ثابتة getFileenCode (مسار السلسلة) {string charset = "ASCI" ؛ ) ؛ ] == (بايت) 0xfe) {charset = "Unicode" ؛ {{charset = "unicode" ؛ (byte) 0xbf) {charset = "utf8" ؛ ! = - 1) {loc ++ ؛ <= 0xdf <= 0xdf <= 0xdf <= 0xdf <= 0xdf <= 0xdf) {read = bis.read () ؛ 0x80-0xbf) ، أو قد تستمر ؛ = read && read <= 0xbf) {charset = "utf-8" ؛ + integer.toHexString (read) ؛}} catch (استثناء e) {E.PrintStackTrace () ؛} أخيرًا {if (bis! = null) {try {bis.close () ؛} catch ption ex) {}}} إرجاع charset ؛} سلسلة ثابتة getencode (int flag1 ، int flag2 ، int flag3) {string encode = "" "" ؛ -8) if (flag1 == 255 && flag2 == 254) {encode = "unicode" ؛ == 191) {encode = "utf8" ؛} آخر {encode = "ASCI" ؛2) اقرأ تدفق الملف من خلال تنسيق الترميز للملف
/** احصل على محتوى الملف من خلال المسار. ! */ readfile static static (مسار السلسلة) {string data = null ؛ رمز السلسلة = fileencode.getfileencode (path) ؛ لا تعني البيئة ترميز نظام التشغيل // code = system.getProperty ("file.encoding") ؛ 1 ؛ ، الطول) ؛} البيانات = سلسلة جديدة (SB) ؛} catch (استثناء e) {e.printstacktrace () ؛ (ISR! = null) {isr.close () ؛}} catch (ioException e) {e.printstacktrace () ؛ }3) اكتب الملف من خلال التنسيق المحدد بواسطة الملف
/** احفظ محتوى الملف وفقًا للمسار المحدد وتنسيق الترميز. إلى محتوى النص ، تحتوي طريقة الأمان * * param * على بيانات البايت التي سيتم كتابتها في الملف * Param Path * ، على اسم الملف * RETURN BOOLEAN * عند اكتمال الكتابة ، ارجع إلى TRUE ؛ / static boolean public (Data Byte [] ، string path) = ملف جديد (file.get parent ()) ؛ } OSW = New OutplustreamWriter (PisterputStream (Path) ، Code) ؛ info ("استثناء Tofile IO:"+E.GetMessage ()) ؛ () ؛4) بالنسبة للملفات الثنائية ، وهناك عدد قليل جدًا من المحتوى ، مثل وثائق الكلمات ، وما إلى ذلك ، يمكنك قراءة الملفات وكتابةها بالطرق التالية
/** * اقرأ الملفات من المسار المحدد إلى صفيف البايت ، يمكنك اختيار هذه الطريقة لبعض محتوى تنسيق النص * 457364578634785634534 * param path * مسار الملف ، بما في ذلك اسم الملف * byte [] بايت بايت بايت من قبل بايت بايت بايت من قبل بايت من قبل بايت من قبل بايت بايت من قبل بايت بايت من قبل بايت من قبل بايت بايت. FileInputStream Dream = NewInputStream (Path) ؛ يمكن استخدام محتوى البايت في الملف المقابل. * param data * 将要写入到文件中的字节数据 * param path * 文件路径 ، 包含文件名 * return boolean is 当写入完毕时返回 true ؛ Byte Data []
ما سبق هو كل محتويات هذه المقالة.