首先来说一下FileInputStream的问题:
有这样一段代码:
FileInputStream f=new FileInputStream("teat.txt");
int i; int b=f.read();
for(i=0;b!=-1;i++)
{System.out.print((char)b);
b=f.read();
}
关于read()方法的说明是:从输入流中读取一个数据字节,返回下一个数据字节,如果到达文件末尾返回-1。
我的问题是:既然f.read()方法是从输入流中读取的一个数据字节,为什么返回的时候,却变成了一个int型的4个字节的数据?
这样在从文件流中读取数据应该是有影响的 啊。这个read方法为什么要设计成这样的呢?
另外,我还有一段代码不理解:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class JDataTest {
public static void main(String[] args) {
try {
FileOutputStream fout =new FileOutputStream("q:\\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("q:\\out.txt");
DataInputStream dfin=new DataInputStream(fin);
for(i=0;i<4;i++)
System.out.print(dfin.readInt()+", ");
dfin.close();
}catch(Exception e)
{
System.out.println("发生异常:"+e.getMessage());
e.printStackTrace();
}
}
}运行结果是:
控制台输出为:48, 49, 50, 51,
然后我的q盘中多了一个out.txt文件 文件中的内容为: 0 1 2 3
注意0前面有3个空格
我不明白控制台为什么输出48, 49, 50 ,51, 往out.txt写入数据时,3个空格是哪里来的?
坐等高人救命啊
有这样一段代码:
FileInputStream f=new FileInputStream("teat.txt");
int i; int b=f.read();
for(i=0;b!=-1;i++)
{System.out.print((char)b);
b=f.read();
}
关于read()方法的说明是:从输入流中读取一个数据字节,返回下一个数据字节,如果到达文件末尾返回-1。
我的问题是:既然f.read()方法是从输入流中读取的一个数据字节,为什么返回的时候,却变成了一个int型的4个字节的数据?
这样在从文件流中读取数据应该是有影响的 啊。这个read方法为什么要设计成这样的呢?
另外,我还有一段代码不理解:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class JDataTest {
public static void main(String[] args) {
try {
FileOutputStream fout =new FileOutputStream("q:\\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("q:\\out.txt");
DataInputStream dfin=new DataInputStream(fin);
for(i=0;i<4;i++)
System.out.print(dfin.readInt()+", ");
dfin.close();
}catch(Exception e)
{
System.out.println("发生异常:"+e.getMessage());
e.printStackTrace();
}
}
}运行结果是:
控制台输出为:48, 49, 50, 51,
然后我的q盘中多了一个out.txt文件 文件中的内容为: 0 1 2 3
注意0前面有3个空格
我不明白控制台为什么输出48, 49, 50 ,51, 往out.txt写入数据时,3个空格是哪里来的?
坐等高人救命啊
在不抛异常的情况下,返回int才可以表达到达文件尾这种特殊情况,
当然, 其实也可以设计成 返回byte, 到达文件尾时抛异常di二个问题:
用十六进制编辑器查看out.txt 应该是这样的
00 00 00 30 00 00 00 31 00 00 00 32 00 00 00 33
可以看出,那不是空格 0x20 ,而是0x00, 但这个字符没法显示, 只好当成空格了
第二个,写入文件时是用int形式写入的,也就是说每4个字节写入时是一个整体,而如果在XP简体中文系统下打开txt文件时,默认是用gbk字符集解码,会把两个字节看成一个整体来读出,所以会解码错误。
对于第二个问题:
那为啥控制台输出的是48, 49 ,50 ,51呢?谁能解释一下这些数据是怎么来的?
首先 dfout.writeInt('0'+i); 0的ASC码为48 ,然后 写入文件的依次为48 49 50 51(以java字符写入),然后你再用readInt()去读,读出到控制台(以java字符)为 48 49 50 51,至于打开文件,应该是用windows默认字符(我也不知道是什么)读取的,读出来的是什么就不知道了这里只强调 java字符流用什么写入的(比如此题是DataOutputStream) 读文件时就得用DataInputStream才能正确读取