자바의 쓰레기 코드 문제
최근에 프로젝트를 수행 할 때 자바에서 코드 문제가 발생하는 경우가 많기 때문에 시간이 걸렸습니다. 여기서 나는 그들을 편집했다.
분석
인코딩 및 디코딩
인코딩은 문자를 바이트로 변환하는 것이며 디코딩은 바이트를 문자로 변환하는 것입니다.
바이트 스트림과 문자 스트림
파일 읽기 및 쓰기는 모두 바이트 스트림을 통해 구현됩니다. Java에 문자 스트림이 있더라도 기본 레이어는 여전히 바이트 스트림을 사용합니다.
쓰레기 코드 문제가 발생합니다
Java에서 가장 자주 사용되는 캐릭터는 캐릭터입니다. 파일을 메모리로 읽고 콘솔 (Byte Stream ---> 문자 스트림)에 표시하면 디코딩을 사용해야합니다. 파일이 UTF-8 인코딩이고 디코딩 할 때 (인코딩이 지정되지 않은 경우 Java는 시스템 기본 인코딩을 채택하여 해독 할 때) 파일이 GBK로 오용하면 해독 된 코드 만 표시 할 수 있습니다. 파일을 작성할 때 인코딩 (UTF-8)을 지정하는 것이 가장 좋습니다.
해결책
예 1
바이트 스트림을 문자 스트림으로 변환 할 때 인코딩 형식을 지정합니다. 이것은 우리의 파일이 GB2312에 의해 인코딩되어야합니다.
public static string read (String filename) 예외 {inputStream은 = new FileInputStream (filename); bufferedReader in = new bufferedReader (new inputStreamReader (is, "gb2312")); // 인코딩 형식 string s를 지정합니다. StringBuilder sb = new StringBuilder (); while ((s = in.readline ())! = null) {sb.append (s + "/n"); } in.close (); 반환 sb.toString ();} 반환 예 2
바이트 스트림을 통해 직접 읽고 문자열을 사용하여 문자로 변환 할 때 인코딩을 지정하십시오.
package com.dy.xidian; import java.io.fileInputStream; import java.io.inputStream; class bufferedInputfile {public static string read (String filename)는 예외를 {@SuppressWarnings ( "Resource") InputStream is = new FileInputStream (filename); 바이트 [] B = 새로운 바이트 [1024]; is.read (b); 새 문자열을 반환합니다 (B, "GB2312"); }} public class memoryInput {public static void main (String [] args)은 예외 {String filename = "e : /html/gb2312.php"; 문자열 s = bufferedInputFile.Read (filename); System.out.println (s); }}덫
I/O 운영에는 Filereader 클래스가 있습니다. 이 클래스는 바이트 스트리밍의 세부 사항을 캐릭터 스트림으로 숨 깁니다. bufferedReader in = new bufferedReader (New Filereader (filename)); 이런 식으로, 우리는 캐릭터 스트림을 직접 얻습니다. 그러나 기본 인코딩 방법이 FilereAder에 채택되기 때문에 인코딩을 설정하지 않았다는 것을 알았습니다. 이것은 매우 위험 해집니다. 기본 인코딩 형식이 파일 인코딩과 다른 경우 읽기 데이터를 설명해야합니다. 따라서 예제의 메소드를 사용하여 스트림을 변환하는 것이 좋습니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!