关于read(byte[] b)方法的返回值
# 具体遇到的问题
imooc.txt文件中的内容如下,请问下面的代码输出值的含义是什么?
是不是换行符也会占一个字节?
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这package pers.snail.chars;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class CharDemo {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("imooc.txt");
InputStreamReader isr = new InputStreamReader(fis,"GBK");
FileOutputStream fos = new FileOutputStream("imooc1.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");//读写数据时要保持编码格式的一致
int n = 0;
char[] ch = new char[10];
//读文件
// while((n=isr.read())!=-1) { //第一种读法,一次读取一个字节
// System.out.print((char)n);
// }
while((n=isr.read(ch))!=-1) { //第二种读法,一次读取ch.length个字节
System.out.println(n);
// String s = new String(ch,0,n); //参数含义与write(b,off,n)相同
// System.out.print(s);
}
//写文件
// while((n=isr.read(ch))!=-1) {
// osw.write(ch,0,n);
// }
// osw.flush();
osw.close();
fos.close();
isr.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
}
里输入代码,可通过选择【代码语言】突出显示
正在回答
同学你好,
1,通过isr.read(ch)将数据读取到字符数组ch中,而n是实际读取的字符数,ch数组长度为10,那么如果有20个数据,第一次循环读取了10个,数组读满了,此时n就是10;而这个10对应的是文件中的“你好,慕课网”以及换行符其中的一个字节(换行符占两个)
2,字符流先会按照编码方式去读取字节转换成字符放入数组;utf-8每个汉字3个字节,gbk每个汉字2个字节;如果是一个utf-8的汉字的话,读出来3个字节,转gbk的时候转成了1.5个字符,两个utf-8汉字读出来6个字节 ,转gbk的时候转成了3个字符;所以“你好,慕课网”6个汉字,18个字节,转gbk时转成了9个字符,再加上个换行;同理下面输出10,也是这个道理
祝学习愉快
同学你好
1,read(byte[] b) 方法是从输入流中将最多b.length个字节的数据读入一个byte数组b中。方法返回读入数组b的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
2, 输出10是因为同学前面定义的了char[] ch = new char[10];,长度是10的char数组,而返回值n表示的是返回数组的ch的字节数,所以最后输出了10
3,输出4老师这里没有进行复现,如下
4,这个编程题并不能很好的证明在不同编码下所占的字节数
同学可以结合下面这个例子来理解下
5,是的,read()方法一次是读取一个数据字节,如下
祝学习愉快
同学你好
1,read(byte[] b) 方法是从输入流中将最多b.length个字节的数据读入一个byte数组b中。方法返回读入数组b的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
2, 输出10是因为同学前面定义的了char[] ch = new char[10];,长度是10的char数组,而返回值n表示的是返回数组的ch的字节数,所以最后输出了10
3,输出4老师这里没有进行复现,如下
4,这个编程题并不能很好的证明在不同编码下所占的字节数
同学可以结合下面这个例子来理解下
5,是的,read()方法一次是读取一个数据字节,如下
祝学习愉快
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星