黑马程序员技术交流社区
标题:
一个入学测试题
[打印本页]
作者:
毅心缘
时间:
2014-6-29 16:25
标题:
一个入学测试题
我个人觉得这个题是个坑,你们觉得呢?
package com.itheima;
/**
* 定义一个文件输入流,
* 调用read(byte[] b)方法将exercise.txt文件中的所有内容打印出来(byte数组的大小限制为5)。
*/
/*
* 思路:因为缓冲区数组固定是5个字节大小,
* 而当文件中汉字时,汉字占2个字节,一次读取5个字节可能出现截取半个汉字的情况,所以不能急着打印;
* 先分析一次读取后是否截取到了半个汉字,
* 如果是,只打印前4个字节的内容,然后退回一个字节再读取,如果不是,直接输出;
* 由此想到了利用随机访问文件流,可以设置当前指针位置,必要时回退一个字节。
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.RandomAccessFile;
public class Test8 {
public static void main(String[] args) throws Exception {
// 创建一个读取流和文本相关联
RandomAccessFile raf = new RandomAccessFile("c:\\exercise.txt", "r");
// 定义一个大小为5个字节的数组、存储读取到的字符
byte[] buf = new byte[5];
int len = 0;
int currentPos = 0;
while ((len = raf.read(buf)) != -1) {
String str = new String(buf, 0, len);
currentPos = currentPos + len;
int i = 0;
// i表示一个ASCII字符字节位置或一个汉字的第一个字节位置,汉字GBK编码的第一个字节都小于0
while (i < 5) {
if (buf[i] < 0)
i = i + 2;
else
i = i + 1;
}
// read(buf)后,如果截取到了半个汉字,那buf[4]肯定是一个汉字的第一个字节,buf[4]<0,上面的i=6
if (i == 6) {
// 截取了半个汉字时,应该退回到前一个位置,重新再读取5个字节
currentPos = currentPos - 1;
raf.seek(currentPos);
// 只把前4个字节的内容打印出来
System.out.print(str.substring(0, str.length() - 1));
} else {
// 截取到完整汉字,整个输出
System.out.print(str);
}
}
}
}
复制代码
作者:
iWilliam
时间:
2014-6-29 16:33
{:3_53:}我来试试~
作者:
iWilliam
时间:
2014-6-29 16:53
楼主的入学测试麽~还可以在优化优化的~至少+=,-=看上去更专业
作者:
黄梁梦想享
时间:
2014-6-29 17:00
不错不错
作者:
yinxjfly
时间:
2014-6-29 19:32
楼主厉害!入学测试的题大都有几道题会有坑
作者:
七弦
时间:
2014-6-29 20:04
本帖最后由 七弦 于 2014-6-29 20:06 编辑
好幸运!
作者:
blz01003hm
时间:
2014-6-29 20:57
我也觉得坑,
将exercise.txt文件中的所有内容打印出来,用字符流是最方便的,但他要你用字节流。
作者:
帅哥哥
时间:
2014-6-29 21:57
后面好像有个 “不考虑中文编码问题”
作者:
itisdream
时间:
2014-6-29 22:28
有点点坑。。
作者:
夏季熬成了秋
时间:
2014-6-29 23:08
看看转转
作者:
Alan_Kwan
时间:
2014-6-29 23:18
utf-8怎么办?
作者:
SEPARATOR
时间:
2014-6-29 23:24
mark......
作者:
钟翠翠
时间:
2014-6-29 23:39
看来我还有好长一段路要走,飘过~~~~~
作者:
肥洋洋
时间:
2014-6-29 23:53
不管那文件里存的是什么,你用字节流读不就可以了。我也有这道题,用字节流,好像也没错...别想太复杂
作者:
luheqi
时间:
2014-6-30 00:54
有坑是正常的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2