2012-04-01 3 views
1

I/O 작업에 대해 알아낼 수 없습니다.파일에서 (비트 단위로) 읽은 다음 파일에 다시 쓰기

나는 파일 읽기이 코드를 사용하고 있습니다 :

symbol = -78 - ᄇ - 65458 
symbol = 52 - 4 - 52 
symbol = -91 - ᆬ - 65445 
symbol = 80 - P - 80 
symbol = -118 - ハ - 65418 
symbol = 76 - L - 76 
symbol = 122 - z - 122 
symbol = 78 - N - 78 
symbol = 112 - p - 112 
symbol = 97 - a - 97 
symbol = 56 - 8 - 56 
symbol = -112 - ミ - 65424 
: 내가 TXT 파일 다음 모든 좋은하지만 난 예를 들어, 이미지 TXT하지 읽을 때 나는 비슷한 결과를 얻을 수 읽기

if (file.length() > Integer.MAX_VALUE) { 
    throw new IllegalArgumentException("File is too large: " + file.length()); 
} 

int len = (int) file.length(); 
System.out.println("failo dydis yra = "+len); 
FileInputStream inputStream = new FileInputStream(file); 

try { 
    byte[] fileBits = new byte[len]; 
    for (int pos = 0; pos < len;) { 
     int n = inputStream.read(fileBits, pos, len - pos); 

     if (n < 0) { 
      throw new EOFException(); 
     } 
     pos += n; 

    } 
    for(int q=0; q<len; q++){ 
     char ch = (char)fileBits[q]; 
     int sk = (int)ch; 
     System.out.println("symbol = "+fileBits[q]+" - "+ch+" - "+sk); 
    } 

그래서 에서을 뺀 이유를 알 수 없습니까? 그리고 왜 내가 다시 65로 변환하고 싶습니다 ***.

어쩌면 나는이 바이트들을 문자들로 변환하고 그것들과 함께 작업하고 파일에 다시 쓰기를 원한다면 다른 것을 읽어야한다.

감사합니다.

+0

InputStreamReader에서 대신 랩핑을 시도하십시오. 이 문자를 올바르게 처리합니다. – Optimist

답변

2

그래서 왜 마이너스 값을 계산할 수 없습니까?

Java의 경우 a byte can have values between -128 and 127. 따라서 음수 값을 보게됩니다. 나는이 문자로 바이트 변환이 65 ***

얻을 다시 변환 할 때 0과 256

왜 당신은 정수 값이 변환 0xff & fileBits[q]를 사용할 수있다 바이트가 ASCII 호환 가능 인코딩의 ASCII 문자 문자열의 일부가 아닌 한 의미가 없습니다. Java는 바이트의 첫 번째 비트를 16 비트 값으로 확장합니다. 첫 번째 비트가 설정되면 (즉, 숫자가 음수 인 경우) 결과는 높은 16 비트 숫자가되며 일반적으로 65xxx의 형식입니다.

모든 것이 잘 작동하고 있습니다. 바이트를 이미지 처리/디스플레이 기능에 전달하십시오. 파일을 읽는 동안 파일 크기가 변경되면 불필요하게 실패 할 것이기 때문에 함수가 오류가 발생하기 쉽습니다. 문자열을 읽으려면 Reader 객체를 사용하십시오 (예 : InputStreamReader).

+0

그래서 문자로 작업해야하는 경우 어떻게해야합니까? 변환 할 수있는 방법이 있습니까? – Streetboy

+0

예, '리더'를 사용하십시오. 답변을 업데이트했습니다. – phihag

+0

어떻게하면 바이트로 다시 변환 할 수 있을까요? 0xf & fileBits [q] – Streetboy

관련 문제