파일에 ASCII 코드로 작성된 번호가 있습니다. 예를 들어, "9"는 2 바이트, 즉 총 8 비트로 저장된다.숫자를 이진 파일로 저장하십시오.
숫자를 0-9 사이의 이진 값으로 저장하는 것만으로 저장소를 최적화하려는 경우 4 비트 만 사용하여 저장해야합니다.
어떤 도움이 필요합니까?!
파일에 ASCII 코드로 작성된 번호가 있습니다. 예를 들어, "9"는 2 바이트, 즉 총 8 비트로 저장된다.숫자를 이진 파일로 저장하십시오.
숫자를 0-9 사이의 이진 값으로 저장하는 것만으로 저장소를 최적화하려는 경우 4 비트 만 사용하여 저장해야합니다.
어떤 도움이 필요합니까?!
당신은 그들에게 그
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Bin {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("\\test.bin");
String digits="12345";
char[] chars = digits.toCharArray();
for (int i = 0 ; i < chars.length ; i+= 2) {
byte b1 = (byte) (chars[i] - (byte) '0');
byte b2 = (byte) (i < chars.length-1 ? chars[i+1] - (byte) '0' : 0xf);
fos.write((byte) ((b1 << 4) | b2));
}
fos.close();
FileInputStream fis = new FileInputStream("\\test.bin");
StringBuffer result = new StringBuffer();
byte[] buf = new byte[100];
int read = fis.read(buf);
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
for (int i = 0 ; i < read ; i++) {
byte both = (byte) bais.read();
byte b1 = (byte) ((both >> 4) & 0xf);
byte b2 = (byte) (both & 0xf) ;
result.append(Character.forDigit(b1, 10));
if (b2 != 0xf) {
result.append(Character.forDigit(b2,10));
}
}
System.out.println(result.toString());
}
}
같은 바이너리를 쓸 수 있었다 그러나 나는이
좋아요! 남자 그냥 내게 말해 어떻게 내 문자를 다시 읽고 문자열에 저장할 수 있습니다. 우리가 –
@shaklasah로 시작한 문자열은 내가 생각한 것보다 더 힘들었습니다. 소스 문자열이 홀수 인 경우 0xf를 적어 둡니다. 완성 된 바이트 만 쓸 수 있기 때문에 패딩으로 사용됩니다. – stacker
내 친구에게 고마워하지만, 여전히 문제가 있다고 생각합니다. 98765 인코딩 시도 .. –
어떨까요? 2 => 0010 1 => 0001 0 => 0000 4 => 0100 3 => 0011 8 => 1,000 9 => 1,001 7 => 0111 6 => 0110 5 => 0101
예, 파일에 이것을 쓰려면 어떻게해야합니까?! –
파일 출력 스트림을 사용하여 파일 – nidhin
에 쓸 수는 있지만 각 숫자를 다시 2 바이트로 처리하므로 0000이 8 바이트로 간주되므로 더 심각해질 것입니다. S –
내가 표준을 고수 할 매우 유용 할 것이라는 점을 의심은 기본 형식을 휴대용 형식으로 출력에 쓸 수 있습니다.
writeLong
, writeInt
입니다. 이 방법을 사용하면 데이터를 쓸 수 있으며 나중에 DataInputStream
의 readLong
및 readInt
으로로드 할 수 있습니다.
압축되지 않은 압축 파일은 나중에 압축 할 수 있습니다.
문자를 쓰면 각 문자마다 1 바이트가 필요합니다. 바이너리 또는 부울 데이터를 써야합니다. 5 => 0101을 표현할 수 있지만 0101을 문자로 쓰면 4 바이트가 걸리며 이진 또는 부울을 쓰면 비트가됩니다.
"9"가 "57"로 저장된다는 것을 의미합니까? 나는 ascii 57이 2 바이트를 어떻게 사용할 수 있는지를 볼 수 없다. – gigadot
예 char "9"는 파일 하나에 2 바이트로 저장되며 하나는 5이고 다른 하나는 7입니다. –
여기 알고리즘에 버그가있을 수 있습니다. 파일 압축에 Zip 라이브러리를 사용할 수 없습니까? Zip 또는 보관 라이브러리에는 자신이 올 수있는 알고리즘보다 훨씬 정교한 알고리즘이 있습니다. – gigadot