ปัญหารหัสขยะใน Java
เมื่อเร็ว ๆ นี้เมื่อทำโครงการฉันมักจะพบปัญหารหัสที่อ่านไม่ออกใน Java ดังนั้นฉันจึงใช้เวลาในการจัดเรียงปัญหารหัสที่อ่านไม่ออกและวิธีจัดการกับพวกเขา ที่นี่ฉันได้รวบรวมพวกเขา
วิเคราะห์
การเข้ารหัสและถอดรหัส
การเข้ารหัสคือการแปลงอักขระเป็นไบต์และการถอดรหัสคือการแปลงไบต์เป็นอักขระ
สตรีมไบต์และสตรีมอักขระ
การอ่านและการเขียนไฟล์ทั้งหมดถูกนำไปใช้ผ่านสตรีมไบต์ แม้ว่าจะมีสตรีมอักขระใน Java เลเยอร์พื้นฐานยังคงใช้สตรีมไบต์
ปัญหารหัสขยะเกิดขึ้น
อักขระที่ใช้บ่อยที่สุดใน Java คือตัวละคร เมื่อเราอ่านไฟล์ลงในหน่วยความจำและแสดงในคอนโซล (สตรีมไบต์ ---> สตรีมอักขระ) เราจำเป็นต้องใช้การถอดรหัส หากไฟล์คือการเข้ารหัส UTF-8 และเราใช้ในทางที่ผิดกับ GBK เมื่อถอดรหัส (หากไม่ได้ระบุการเข้ารหัส Java จะใช้การเข้ารหัสเริ่มต้นของระบบ) เพื่อถอดรหัสแล้วรหัสที่อ่านไม่ออกเท่านั้น เมื่อเราเขียนไฟล์จะเป็นการดีที่สุดที่จะระบุการเข้ารหัส (UTF-8)
สารละลาย
ตัวอย่างที่ 1
เมื่อแปลงสตรีมไบต์เป็นสตรีมอักขระเราจะระบุรูปแบบการเข้ารหัส นี่คือไฟล์ของเราควรถูกเข้ารหัสโดย GB2312
การอ่านสตริงสาธารณะคงที่ (ชื่อไฟล์สตริง) พ่นข้อยกเว้น {inputStream คือ = ใหม่ fileInputStream (ชื่อไฟล์); bufferedReader in = new bufferedReader (ใหม่ inputStreamReader (IS, "GB2312")); // ระบุสตริงรูปแบบการเข้ารหัส s; StringBuilder sb = new StringBuilder (); ในขณะที่ ((s = in.readline ())! = null) {sb.append (s + "/n"); } in.close (); ส่งคืน sb.toString ();} ตัวอย่างที่ 2
อ่านโดยตรงผ่านสตรีมไบต์และระบุการเข้ารหัสเมื่อแปลงเป็นอักขระโดยใช้สตริง
แพ็คเกจ com.dy.xidian; นำเข้า java.io.fileinputstream; นำเข้า Java.io.InputStream คลาส bufferedInputFile {สตริงคงที่สาธารณะอ่าน (ชื่อไฟล์สตริง) โยนข้อยกเว้น {@SuppressWarnings ("ทรัพยากร" ไบต์ [] b = ไบต์ใหม่ [1024]; IS.READ (B); ส่งคืนสตริงใหม่ (B, "GB2312"); }} คลาสสาธารณะ MemoryInput {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {สตริงไฟล์ = "e: /html/gb2312.php"; สตริง s = bufferedInputFile.read (ชื่อไฟล์); System.out.println (s); -กับดัก
มีคลาส filereader ในการดำเนินการ I/O ชั้นเรียนนี้ซ่อนรายละเอียดของการสตรีมไบต์ลงในสตรีมอักขระซึ่งเราสามารถใช้ด้วยวิธีนี้ bufferedReader in = new bufferedReader (filereader ใหม่ (ชื่อไฟล์)); ด้วยวิธีนี้เราได้รับสตรีมตัวละครโดยตรง แต่เราพบว่าเราไม่ได้ตั้งค่าการเข้ารหัสเนื่องจากวิธีการเข้ารหัสเริ่มต้นถูกนำมาใช้ใน filereader สิ่งนี้กลายเป็นอันตรายมาก หากรูปแบบการเข้ารหัสเริ่มต้นแตกต่างจากการเข้ารหัสไฟล์ของเราข้อมูลการอ่านจะต้องอ่านไม่ออก ดังนั้นเราควรใช้วิธีการในตัวอย่างเพื่อแปลงสตรีม
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!