Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取/写入大型文件的最简单格式_Java_File_Encoding - Fatal编程技术网

Java 读取/写入大型文件的最简单格式

Java 读取/写入大型文件的最简单格式,java,file,encoding,Java,File,Encoding,我需要编写大量文件(超过100万行)并将文件发送到另一台机器,在那里我需要使用JavaBufferedReader,一次读取一行 我使用的是独立的Json格式,但结果不是很方便, 它需要太多的编码,并且会消耗额外的RAM/CPU。 我在找这样的东西: client:id="1" name="jack" adress="House N°1\nCity N°3 \n Country 1" age="20" client:id="2" name="alice" adress="House N°2\nC

我需要编写大量文件(超过100万行)并将文件发送到另一台机器,在那里我需要使用Java
BufferedReader
,一次读取一行

我使用的是独立的Json格式,但结果不是很方便,
它需要太多的编码,并且会消耗额外的RAM/CPU。
我在找这样的东西:

client:id="1" name="jack" adress="House N°1\nCity N°3 \n Country 1" age="20"
client:id="2" name="alice" adress="House N°2\nCity N°5 \n Country 2" age="30"
vihecul:id="1" model="ford" hp="250" fuel="diesel"
vihecul:id="2" model="nisan" hp="190" fuel="diesel"
这样我可以一次读一个对象

我知道url.encode和base64,但我试图保持较短的可读行


所以有什么建议吗

如何使用
DataInputStream
DataOutputStream
读取/写入二进制格式的文件


当然,您的数据必须具有固定的结构,但作为一项好处,您将获得更小的文件大小和更快的读/写速度。

使用
DataInputStream
DataOutputStream
以二进制格式读/写文件如何


当然,您的数据必须具有固定的结构,但作为一项好处,您将获得更小的文件大小和更快的读/写速度。

对于大型文件,任何文本数据格式,特别是JSON、YAML或XML等标记数据,都不是一个很好的解决方案

我可以建议使用通用二进制格式,如或

谷歌协议缓冲区非常容易启动


当然,如果您只需要Java到Java的数据传输,您可以使用Java开箱即用的序列化

对于大型文件,任何文本数据格式,特别是JSON、YAML或XML等标记数据,都不是很好的解决方案

我可以建议使用通用二进制格式,如或

谷歌协议缓冲区非常容易启动



当然,如果您只需要Java到Java的数据传输,您可以使用Java开箱即用的序列化

为什么不使用CSV?“不是很方便”不是问题描述。100万条线路并不庞大。使用
BufferedReader.readLine()
,每秒可以读取数百万行。额外编码不一定“消耗额外的RAM/CPU”。不清楚你在问什么。@EJP我选择BufferedReader是因为它的速度非常快,正如你所说,我在Jackson library中使用它,但缩进Json格式使行数大得多,我试图通过减少行数和磁盘输入/输出来优化代码,因为我使用的机器并不总是最新的。这就是为什么我试图找到一个更好的解决方案
,我需要用Java BufferedReader一次读一行。您真的需要BufferedReader吗?或者您只是说,因为在一行中有一个条目,逐行读取,并且将整个文件加载到内存是不方便的?文件可以是二进制格式,还是必须是人类可读的文件?@zakaria35您应该看看BeanIO(),为什么不使用CSV?“不是很方便”不是一个问题描述。100万条线路并不庞大。使用
BufferedReader.readLine()
,每秒可以读取数百万行。额外编码不一定“消耗额外的RAM/CPU”。不清楚你在问什么。@EJP我选择BufferedReader是因为它的速度非常快,正如你所说,我在Jackson library中使用它,但缩进Json格式使行数大得多,我试图通过减少行数和磁盘输入/输出来优化代码,因为我使用的机器并不总是最新的。这就是为什么我试图找到一个更好的解决方案
,我需要用Java BufferedReader一次读一行。您真的需要BufferedReader吗?或者您只是说,因为在一行中有一个条目,逐行读取,并且将整个文件加载到内存是不方便的?文件可以是二进制格式还是必须是人类可读的文件?@zakaria35如果BeanIO()需要使用
BufferedReader
,一次读取一行,那么使用
DataOutputStream
没有明显的意义,使用
DataInputStream
也毫无意义,因为问题是关于生成输出,因为它可以说是关于任何东西的。为了检查/测试的目的,我需要该文件是人类可读的,但是由于许多建议的二进制文件,我将给它一个look@zakaria35二进制文件中没有行。把它们看成一个原语序列。@ ZAKARIA35不需要,可以在不加载全部文件的情况下处理整个文件。memory@zakaria35此外,如果你用二进制存储数据,它们会更加紧凑。1如果需要使用
BufferedReader
,一次读取一行,那么使用
DataOutputStream
没有明显的意义,使用
DataInputStream
也毫无意义,因为问题是关于生成输出,因为它可以说是关于任何东西的。为了检查/测试的目的,我需要该文件是人类可读的,但是由于许多建议的二进制文件,我将给它一个look@zakaria35二进制文件中没有行。把它们看成一个原语序列。@ ZAKARIA35不需要,可以在不加载全部文件的情况下处理整个文件。memory@zakaria35此外,如果你用二进制存储数据,它们会更加紧凑。1mil记录可以很容易地放入RAM中,并且将花费较少的时间发送到远程机器。P已明确表示他“需要使用
BufferedReader
,一次读取一行”。@EJP是否保证JSON、XML或YAML记录可以在不进行解析的情况下简单地逐行读取?我不这么认为,BufferedReader.readLine的唯一可能的格式是逗号分隔值(CSV),我认为使用它通常不是一个好主意。我是java的Bigger,没有想法,所以我发布了这个问题来收集建议,以便测试它们并为我的程序选择最佳的格式,我将开始测试CSV