黑马程序员技术交流社区
标题:
关于io流有一些小疑惑。
[打印本页]
作者:
皮卫凯
时间:
2012-9-17 23:46
标题:
关于io流有一些小疑惑。
本帖最后由 皮卫凯 于 2012-9-18 08:59 编辑
import java.io.*;
public class File4
{
public static void main(String[] args)throws Exception //简单的抛了下。
{
File f=new File("f:\\java\\file.txt");//构建一个File对象f
FileInputStream fis=new FileInputStream(f);
byte[] b=new byte[(int)f.length()];//就是这一步没弄明白
fis.read(b);
for(int i=0;i<f.length();i++)
{
System.out.println((char)b
);
}
fis.close();
}
}
问题1:byte[] b=new byte[(int)f.length()];这一步中,f的长度本身就是整数呀,为什么前面还加(int)?我试着去掉但是编译通不过
问题2:这也是我最想弄明的地方,file.txt文件中的字符就是通过上面构建数组的时候加载到数组b里面去的吧?然后由fis输入流媒介里面去,但是file文本里面的字符到底是这么跑到数组b里面去的呀?怎么弄个数组出来字符就跑到里面去了?不明白
作者:
王德升
时间:
2012-9-17 23:57
问题1:查PAI返回值是: long length() 故强转,太大数组装不下。
问题2:就相当于容器,Stringbuffer,StringBuild啊,等你要的时候就去取。
作者:
黑马张旭明
时间:
2012-9-18 00:08
f.length()返回的不是int型,是一个long型。
file.txt文件中的字符就是通过上面构建数组的时候加载到数组b里面去的吧?
byte[] b=new byte[(int)f.length()];
可能这里用到了f.length()方法让楼主误会了字符是这时候进去的,这里的f.length()只是取文件的长度以便定义一个刚好大小
的数组来存放数据。
file文本里面的字符到底是这么跑到数组b里面去的呀?怎么弄个数组出来字符就跑到里面去了?
fis.read(b);
真正使字符跑到数组b里面去的是上面这句,这句的意思是从关联了"f:\\java\\file.txt"的fis流中将数据读到字节数组b中。
未命名.jpg
(8.46 KB, 下载次数: 108)
下载附件
2012-9-17 23:58 上传
作者:
吴通
时间:
2012-9-18 01:46
import java.io.*;
public class File4
{
public static void main(String[] args)throws Exception //简单的抛了下。
{
File f=new File("f:\\java\\file.txt");//构建一个File对象f
FileInputStream fis=new FileInputStream(f);
byte[] b=new byte[(int)f.length()];//就是这一步没弄明白
fis.read(b);
for(int i=0;i<f.length();i++)
{
System.out.println((char)b
);
}
fis.close();
}
}
1.楼主想要通过建立一个和文件长度一样的字节数组来把文件全部转换放进去,
并且f.length()即文件长度是long类型的,由于long类型的数据无法直接new byte数组,需要转换成int。
这里要注意long的值不要大于int最大值,否则会造成数据丢失。
2.通过查阅API发现FileInputStream有一个read(byte[])一次读取一个数组的方法,所以通过f.read(b)
就实现了把文本数据读取到数组中,我想楼主可能是想怎样通过代码来实现这个过程呢?
这个就需要我们查看java的源码了 可以在JDK\src.zip\java\io中查看
其实这种方法我们只需要能会查阅API使用这些方法就行了,毕竟我们从事的不是最底层的开发工作。
作者:
皮卫凯
时间:
2012-9-18 08:56
谢谢各位。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2