为什么我的文本文件比二进制文件大?

awildbore:

我正在尝试将大文本文件写入二进制文件,但是二进制文件的大小与我的文本文件相同。我以为写入二进制文件会压缩它?写入二进制文件更有效吗?如何最大程度地减少文本文件的使用空间?

ArrayList<String> strArr = new ArrayList<String>();
File f = new File("words.txt");
BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
  
DataOutputStream out = new DataOutputStream (
                       new BufferedOutputStream(
                       new FileOutputStream("word.ser")
                    
                       )); 
                       
byte[] buffer = new byte[8192]; // or more, or even less, anything > 0
int count;
while ((count = in.read(buffer)) > 0) {
  out.write(buffer, 0, count);
}
in.close();
out.close();
/*ObjectOutputStream oos = new ObjectOutputStream(
                         new BufferedOutputStream(
                         new FileOutputStream("words.ser")

                         )); */
System.out.println(f.length());
File file = new File("words.ser");
System.out.println(file.length());
rzwitserloot:

你很困惑

至少在硬盘/文件系统中没有“文本”文件或“二进制”文件。这是一袋字节。他们都是。只是..字节。

现在,如果字节恰好形成一个序列,例如,如果您从“文件打开”菜单中选择该文件,则Microsoft Word将正确读取该文件,我们可以说“这是Word文件”。对于如此琐碎的人类事物,文件系统完全不关心任何东西。它被要求在名为“ foo.doc”的文件中提供字节,并且这样做。这样做的方式与单词要求文件系统为其提供来自“ foo.txt”或“ foo.jpg”的字节的方式完全一样。如果字节没有意义的话,崩溃是有道理的。

因此,什么是“文本文件”。同样适用:如果文本编辑工具要求文件系统打开文件,并且文件“正常”运行,我想我们可以称其为文本文件。对于文件系统,它只是一个文件。

现在您知道了为什么将文件作为OutputStream或BufferedWriter发送,或者没有什么区别了。那只是在修改精确的机制,使字符最终以字节形式结束。假设它是简单的ASCII字符,则每个字符1个字节,就这么简单。

如果希望它更小,则必须使用压缩算法,例如gzip。注意,显然,随机数据无法压缩。您获得的唯一“压缩”量是压缩算法可以找到并编码为更有效形式的数据中固有的非熵数量。另一个答案显示了一种简便的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么二进制文件不是文本文件,而所有文本文件都是二进制文件?

为什么Git将此文本文件视为二进制文件?

文本文件的二进制输入

写入/读取二进制/文本文件

我会通过二进制复制来损坏文本文件吗?

有什么方法可以在Rust库中包含二进制或文本文件?

如何使git将.strings文件视为文本文件而不是二进制文件

在Crystal中,如何判断文件是文本文件还是二进制文件?

Python:将文本文件转换为二进制文件

使用MarkLogic REST API将文本文件加载为二进制文件

如何使用Linux命令将文本文件转换为二进制文件

来宾Linux系统使用ls将文本文件视为二进制文件

Protobuf消息-解析二进制文件和文本文件之间的差异

如何从二进制文件读取为C中的文本文件?

打开二进制文件与文本文件之间的区别

将文本文件转换为C中的二进制文件

二进制文件到文本文件的转换

在C中将二进制文件转换为文本文件

将文本文件中的二进制数据转换为文本格式

是什么会导致Linux中的file命令将文本文件报告为二进制数据?

将带有数字的文本文件转换为二进制

如何从Linux中的文本文件分辨二进制

如何grep包含一些二进制数据的文本文件?

确定Java中的二进制/文本文件类型?

Internet Explorer:外部文本文件仅以二进制格式提供

如何对文本文件执行二进制搜索

在已排序的文本文件中进行二进制搜索

从文本文件中删除二进制控制字符

将二进制数字写入文本文件[MATLAB]