想问一下java写文件的细节问题,写1M数据量的int,生成的文件是多大?

雪城无月 2013-07-11 05:31:44
如题,java写文件还是挺简单的,但是它写文件的时候,具体的细节是什么呢?
是这样的,我写了个java程序,往txt文件中写入1000000个int数据
如果我没想错的话,不是应该1000000 * 4B才对吗?也就是约等于4MB?
为什么生成的是7.52MB?
谁知道具体细节的能说一下吗?
如果想生成4MB的文件,又是怎么操作呢?
...全文
490 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪城无月 2013-07-12
  • 打赏
  • 举报
回复
谢谢各位的解答
雪城无月 2013-07-12
  • 打赏
  • 举报
回复
问题已经解决了,我知道我使用的writer在写入int的时候,是转化成ascii码的形式来保存的,而使用DataOutputStream的writeInt方法的话,就不会出现这样的问题了,跟预期的一样

String fileName = "d:/test.txt";
try {
	DataOutputStream out = new DataOutputStream(
			new BufferedOutputStream(new FileOutputStream(fileName,true)));
	for (int i = 0 * 1024 * 1024; i < 1 * 1024 * 1024; i++) {
		out.writeInt(i);
	}
	out.close();
			
	DataInputStream input = new DataInputStream(new BufferedInputStream(new   
                                                             FileInputStream(fileName)));
	int i = 0;
	while(i < 10 * 1024){
		System.out.println(input.readInt());
		i++;
	}
	input.close();
} catch (Exception e) {
	e.printStackTrace();
}
雪城无月 2013-07-12
  • 打赏
  • 举报
回复
引用 13 楼 lcf 的回复:
[quote=引用 12 楼 XCWMY 的回复:] 确实是使用ascii,打开文件也确实看到了我写进去的int数据
ascii就不是4byte了啊。。1是1byte,100是3byte。。[/quote] 我已经明白了啊,不过现在寻找一下如何写二进制的方式,觉得使用二进制IO的话就不会出现这种问题了
lcf 2013-07-12
  • 打赏
  • 举报
回复
引用 12 楼 XCWMY 的回复:
确实是使用ascii,打开文件也确实看到了我写进去的int数据
ascii就不是4byte了啊。。1是1byte,100是3byte。。
雪城无月 2013-07-12
  • 打赏
  • 举报
回复
确实是使用ascii,打开文件也确实看到了我写进去的int数据
coooliang 2013-07-12
  • 打赏
  • 举报
回复
你打开文件看看都写了些啥。
lcf 2013-07-12
  • 打赏
  • 举报
回复
print进去的是ascii啊
雪城无月 2013-07-12
  • 打赏
  • 举报
回复
引用 8 楼 XCWMY 的回复:
[quote=引用 7 楼 AFer198215 的回复:] for(int i = 0;i < 1000000;i++){ p.println(i); } println会额外的写入换行符\r\n
额,我尝试了一下用print来写,结果出来的文件大小是5.61M[/quote] 另外尝试把循环条件改成for(int i = 10000000;i < 11000000;i++)2 这样的话,文件就变成了7.62M了,所以基本确定了是编码问题导致这样的
雪城无月 2013-07-12
  • 打赏
  • 举报
回复
引用 7 楼 AFer198215 的回复:
for(int i = 0;i < 1000000;i++){ p.println(i); } println会额外的写入换行符\r\n
额,我尝试了一下用print来写,结果出来的文件大小是5.61M
想喝咖啡的貓 2013-07-12
  • 打赏
  • 举报
回复
for(int i = 0;i < 1000000;i++){ p.println(i); } println会额外的写入换行符\r\n
雪城无月 2013-07-12
  • 打赏
  • 举报
回复
引用 1 楼 lcf 的回复:
看看你的生成代码先
这是我写的其中一种写文件的代码:

try{
   FileOutputStream out = new FileOutputStream("D:/test.dat");
   PrintStream p = new PrintStream(out);
   for(int i = 0;i < 1000000;i++){
        p.println(i);
  }
  p.close();
 }catch(FileNotFoundException e){
    e.printStackTrace();
 }
oh_Maxy 2013-07-12
  • 打赏
  • 举报
回复
引用 3 楼 lcf 的回复:
[quote=引用 2 楼 oh_Maxy 的回复:] 如果想把int 型 1存到文本里,需要转换为字符的。而且,为啥*4不是*8么?
int *4, long *8 txt是后缀,不一定代表文件就是文本(虽然八九不离十),要看他最后用的是什么Writer了 [/quote] 对的,早上还想到自己记错了,呵呵~
「已注销」 2013-07-11
  • 打赏
  • 举报
回复
看你怎么写进去的。txt默认是ansi编码,你写的是用什么编码是不是也会有影响。
lcf 2013-07-11
  • 打赏
  • 举报
回复
引用 2 楼 oh_Maxy 的回复:
如果想把int 型 1存到文本里,需要转换为字符的。而且,为啥*4不是*8么?
int *4, long *8 txt是后缀,不一定代表文件就是文本(虽然八九不离十),要看他最后用的是什么Writer了
oh_Maxy 2013-07-11
  • 打赏
  • 举报
回复
如果想把int 型 1存到文本里,需要转换为字符的。而且,为啥*4不是*8么?
lcf 2013-07-11
  • 打赏
  • 举报
回复
看看你的生成代码先

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧