如何知道二进制文件的字节数?

时间:2018-05-05 00:43:21

标签: java binaryfiles utf dataoutputstream

如何在不运行此代码的情况下计算此二进制文件(t.dat)的字节数 (作为一个理论问题)? 假设您使用默认的ASCII编码在Windows上运行以下程序。

public class Bin {
     public static void main(String[] args){
     DataOutputStream output = new DataOutputStream(
            new FileOutputStream("t.dat"));
     output.writeInt(12345);
     output.writeUTF("5678");
     output.close();
     }
}

1 个答案:

答案 0 :(得分:1)

您可以在使用int关闭文件后查看文件的长度,而不是尝试计算每次写入操作的字节输出。

如果你想在不直接检查长度的情况下找出它,writeUTF占用4个字节,用#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <fcntl.h> #include <ctype.h> #include <string.h> #include <errno.h> #include <sys/wait.h> void producer(FILE *pipe_write_end) { int i; for(i = 1; i <= 10; i++) { fprintf(pipe_write_end, "%d ", i); } fclose(pipe_write_end); exit(0); } void consumer(FILE *pipe_read_end) { int n,k; while(1) { int n = fscanf(pipe_read_end, "%d", &k); if(n == 1) printf("consumer: got %d\n", k); else break; } fclose(pipe_read_end); exit(0); } int main() { pid_t producer_id, consumer_id; int pd[2]; FILE *pipe_write_end, *pipe_read_end; pipe(pd); pipe_read_end = fdopen(pd[0], "r"); pipe_write_end = fdopen(pd[1], "w"); producer_id = fork(); if(producer_id == 0) { fclose(pipe_read_end); producer(pipe_write_end); } consumer_id = fork(); if(consumer_id == 0) { fclose(pipe_write_end); consumer(pipe_read_end); } fclose(pipe_read_end); fclose(pipe_write_end); wait(NULL); wait(NULL); return 0; } 写的东西占用2个字节来表示字符串的编码长度,加上字符串本身占用的空间,在这种情况下是另外4个字节 - 以UTF-8表示,&#34; 5678&#34;中的每个字符。需要1个字节。

这样4 + 2 + 4或10个字节。