在Java 语言中, 有一个字节流,读取的时候怎么判断是应该单字节读取,还是双字节读取,或者是3字节读取以及4字节读取
使用inputsteamreader bufferreader之类,指定字符集,就能读取出字符了,一般不会自行判断要读多少个字节才是一个字符######确实如此,不需要事先判断。 一个一个地读到文档结尾(EOF), 就终止读取操作。再将已得到的字节数据,通过给定的字符编码(字符集),就能转换成所要的字符。######
在 Java 语言中,用字节流读取数据,不需要事先判断 "是应该单字节读取,还是双字节读取,或者是3字节读取以及4字节读取...."。事实上,字节流是依次逐个读取字节的。
如下案例说明以上事实。
import java.io.*;
public class Test_Input {
static void test(String f) throws IOException{
FileInputStream fin = new FileInputStream(f);
byte[] buffer = new byte[1024];
int len=0;
byte b =(byte) fin.read();
while (b!= -1){
buffer[len++]=b;
b =(byte) fin.read();
}
String str = new String(buffer,0,len);
System.out.println(str);
System.out.println("从文档\" " + f + " \" 中读取到: " + len + "个字节。");
fin.close();
}
public static void main(String[] args) throws IOException{
test("hello.txt");
test("hello1.txt");
}
}
cmd:
D:\java\test\OS_China\InputStream>javac Test_Input.java
D:\java\test\OS_China\InputStream>java Test_Input
hello world!
从文档" hello.txt " 中读取到: 12个字节。
世界, 你好!
从文档" hello1.txt " 中读取到: 11个字节。
######
如果已知字节流是纯文本,搞清楚字符集,按byte[]读取,再传给new String(bytes, charset)转换成文本就可以,如:
String s = new String(byteBuffer.array(), StandardCharsets.UTF_8);
如果不知道不是纯文本,要搞清楚内容是由什么组成的,按类型逐段读取(如byteBuffer.getInt()),需要注意的是C语言表达数值通常是大端序的,而java通常是小端序,可以通过"Integer.reserveBytes(value)"来转换(Integer替换成对应的Long、Double等类型)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。