Java 的读写问题

A common question when using the IO classes is why this block of code does not work:


File aFile = new File("input.data");
InputStream is = new FileInputStream(aFile);
byte[] data = new byte[aFile.length()];
is.read(data);

The results can be puzzling. If the input file is an image it may be mangled or not display at all. Binary or text data may be incomplete. This is because Read Doesn't Do What You Think It Does. A quick glance at the Java API for java.io.InputStream gives us the following information:


public int read(byte[] b) throws IOException

Reads some number of bytes from the input stream and stores them
into the buffer array b. The number of bytes actually read is returned as an integer. . .

The documentation states that read reads "some number" of bytes. It is not guaranteed to fill the byte array. The number of bytes read is returned by the read method. One should use this return value to make sure that he is receiving the data which he expects. A correct usage of read() would be to read chunks of a file and collect them in a buffer like so:


ByteArrayOutputStream buffer = new ByteArrayOutputStream();
File aFile = new File("input.data");
InputStream is = new FileInputStream(aFile);
byte[] temp = new byte[1024];
int read;

while((read = is.read(temp)) > 0){
   buffer.write(temp, 0, read);
}
           
byte[] data = buffer.toByteArray();
// process the data array . . .

posted on 2007-11-01 17:28 刘铮 阅读(209) 评论(0)  编辑  收藏 所属分类: JAVA General


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

留言簿(1)

文章分类(141)

文章档案(147)

搜索

最新评论