究极菜鸟级问题,java.io

cs285354778 2012-11-06 12:02:03
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class J_Data {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
FileOutputStream fout = new FileOutputStream("out.txt");
DataOutputStream dfout = new DataOutputStream(fout);
int i;
for(i=0;i<4;i++)
{
dfout.writeInt('0' + i);
}
//dfout.close();
FileInputStream fin = new FileInputStream("out.txt");
DataInputStream dfin = new DataInputStream(fin);
for(i=0;i<4;i++)
{
System.out.print(dfin.readInt()+",");
}
dfin.close();
}
catch (Exception e)
{
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}

}
请问:为什么写入out.txt中的是“ 0 1 2 3”,而不是预期的“ 48 49 50 51”?
...全文
214 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs285354778 2012-11-06
  • 打赏
  • 举报
回复
引用 6 楼 tessykandy 的回复:
引用 2 楼 liuhuan_tao 的回复:DataInputStream 和DataOutputStream属于 字节流,它是一个字节一个字节的写或读。而java中int是4个字节,所以文件中不可能是正确的数。你看到的0,1,2,3其实并不完全,如果用noteplus打开 至于为什么system.println()可以正确读出来,可能是系统调用默认格式如ut……
谢谢您!!我正学到字符流类,得写写代码进行对比。
cs285354778 2012-11-06
  • 打赏
  • 举报
回复
引用 5 楼 zhou9898 的回复:
首先说下,楼主的这个问题很好,楼上很多人回答的也很好. 不过原因是这样子的 您写入文件的是int 的,其实还是转换为字符写入的,是 0 1 2 3 但是你读出来的是int读出来的,但是这个int是从流里面一byte读取出来的 个人觉得写入的是字符 读取出来是char的,读取出来的其实也是0 1 2 3 但是转换成了48 49 50 51的 ……
谢谢您!!结合您和2楼的回复,让我清楚了来龙去脉。
cs285354778 2012-11-06
  • 打赏
  • 举报
回复
引用 2 楼 liuhuan_tao 的回复:
DataInputStream 和DataOutputStream属于 字节流,它是一个字节一个字节的写或读。而java中int是4个字节,所以文件中不可能是正确的数。你看到的0,1,2,3其实并不完全,如果用noteplus打开 至于为什么system.println()可以正确读出来,可能是系统调用默认格式如utf-8.这个不确定。
谢谢您!!您的回复十分有说服力,很清晰!
程序员一灯 2012-11-06
  • 打赏
  • 举报
回复
首先说下,楼主的这个问题很好,楼上很多人回答的也很好. 不过原因是这样子的 您写入文件的是int 的,其实还是转换为字符写入的,是 0 1 2 3 但是你读出来的是int读出来的,但是这个int是从流里面一byte读取出来的 个人觉得写入的是字符 读取出来是char的,读取出来的其实也是0 1 2 3 但是转换成了48 49 50 51的
diypyh 2012-11-06
  • 打赏
  • 举报
回复
或者改为这样:

dfout.writeChar('0' + i);
diypyh 2012-11-06
  • 打赏
  • 举报
回复
注意这句:

	dfout.writeInt('0' + i);
当一个字符型数据和整数型数据计算时,会发生自动向上转型,此时得到的数据是整数型,结果也就是你看见的0,1,2...如果要想写入字符型数据,则需要强制向下转型,改为这样:

	dfout.writeInt((char)('0' + i));
金鱼我在这 2012-11-06
  • 打赏
  • 举报
回复
DataInputStream 和DataOutputStream属于 字节流,它是一个字节一个字节的写或读。而java中int是4个字节,所以文件中不可能是正确的数。你看到的0,1,2,3其实并不完全,如果用noteplus打开


至于为什么system.println()可以正确读出来,可能是系统调用默认格式如utf-8.这个不确定。
tessykandy 2012-11-06
  • 打赏
  • 举报
回复
引用 2 楼 liuhuan_tao 的回复:
DataInputStream 和DataOutputStream属于 字节流,它是一个字节一个字节的写或读。而java中int是4个字节,所以文件中不可能是正确的数。你看到的0,1,2,3其实并不完全,如果用noteplus打开 至于为什么system.println()可以正确读出来,可能是系统调用默认格式如utf-8.这个不确定。
2楼说的对,如果想在out.txt中能看到结果,建议用字符流类OutputStreamWriter或FileWriter
fx_xf 2012-11-06
  • 打赏
  • 举报
回复

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class  J_Data {
	public static void main(String[] args) {
	// TODO Auto-generated method stub
		try{
			FileOutputStream fout = new FileOutputStream("out.txt");
			DataOutputStream dfout = new DataOutputStream(fout);
			dfout.writeInt('0' - 1);
			dfout.writeInt('0');
			dfout.writeInt('0' + 1);	
			dfout.writeInt(1);
			dfout.writeInt('中');
			FileInputStream fin = new FileInputStream("out.txt");
			DataInputStream dfin = new DataInputStream(fin);
			System.out.println(dfin.readInt());
			System.out.println(dfin.readInt());
			System.out.println(dfin.readInt());
			System.out.println(dfin.readInt());
			System.out.println(dfin.readInt());
		}catch (Exception e){
			System.err.println("发生异常:"+e);
			e.printStackTrace();
		}
	}
}
楼主你好,关于你的问题在控制台打印结果为"48,49,50,51",而直接打开out.txt却是"0,1,2,3", 你可以运行一下以上的代码.对比下控制台结果和txt里的结果,再看下面的解释. DataOutputStream本来就是用来写二进制数据的,你直接打开out.txt当然 看到的是乱码,而用DataInputStream按你写的顺序读进来看就对了。
随机开仓,止盈1~2个点,止损1~20个点能实现盈利正期望吗?《从编程小白到量化宗师之路》系列课程是一套综合性实战课程,涵盖股票,期货,虚拟货币等的交易方法和策略手段。《m单位止盈 n单位止损的方式,能不能实现盈利?》是本系列的第四个中课程。本网站的课程宗旨是缩短个人或小型投资者与大型机构投资者之间的的差距。课程内容从交易者经常见到,经常思考的问题开始,通过分析成交后的盈亏分布,建立模型,刻画问题,并对问题以数学的方式进行了表达。从而得出结论。与市面上的其他理论课程不同,本课程注重实战,注重结果,全部模型代码均已经上传发表,学员上课后,可以使用自己的tick数据,进行分析。如果获取tick数据有疑问,可以参考课程:《期货CTP高频数据Tick下载》 https://edu.csdn.net/course/detail/24783本课程能够解答的问题有:1)请问1单位止盈,3单位止损的系统是否能实现正期望值? https://www.zhihu.com/question/423194389/answer/14989174122)抢帽子交易是什么意思?为什么有的人能够成功,说是取款机,而有的人说风险巨大,是老虎机。看过这个课程,您将会知道:a) 这类问题究极解决方案,直达问题核心,不再纠结原因b)构建一段时间可用的交易策略c)知道“没有不变的策略”的原因  

62,616

社区成员

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

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