1、字节流
误区: 被参数所迷惑
先来看一个普通的字节流
FileOutputStream fos = new FileOutputStream("d:\\testbit.txt");
看起方法
write(int b)
这里传入的是一个int,误以为是写入一个int
FileInputStream
read()方法,返回值是int,误以为是读取一个int
1)如果写入一个小于256的数,比如255,读取结果是255
2)如果写入大于255的数,比如256 ,读取的结果是0
查看文件的大小是1个字节
FileOutputStream fos = new FileOutputStream("d:\\testbit.txt");
fos.write(256);
fos.flush();
fos.close();
FileInputStream fis = new FileInputStream("d:\\testbit.txt");
int a =fis.read();
System.out.println(a);
疑问:为什么传入一个int,int占四个字节,然后写入文件,文件大小只有1个字节,而且传入256,读取出来是0
注意:如果发现了上面的问题,那么以后使用就必须注意,不能再乱用字节流。
分析:由于写入一个int到文件,文件的大小只有1个字节,说明只写入了一个字节到文件中,但是int是占四个字节,00000000 00000000 00000000 00000000,那么说明计算机肯定进行了截图,其实在通过写入255,和256可以发现,其实该方法会截图int的最后一个字节写入文件,由于256的二进制是
00000000 00000000 00000001 00000000,最后一个字节大小是0,使用实质是往文件中写入了0。
总结:字节流,都是一个字节,一个字节的在进行读写,当然DataInputStream可以写入int,那么它是不是一下写入了四个字节呢,其实不是的
看他的writeInt();方法的源代码:
public final void writeInt(int v) throws IOException {
out.write((v >>> 24) & 0xFF);
out.write((v >>> 16) & 0xFF);
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(4);
}
写入一个int的时候,是写入了一个字节一个字节的写入,写了四次,通过观察可以方法,它是将int的四个字节,通过截图,将把每个字节写入,
再看readInt()方法源代码:
public final int readInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
读取的一个int的时候,读取出了四个字节,然后进行位移运算,再加在一起,这样一个int,经历了拆分到组装的过程,组装的过程需要根据拆分的过程来,这就是为什么输入流和输出流需要对应使用,如果输入流和输出流不一致,那么拆分和组装的方法就不一致,就不能将拆分后的还原了。
相关推荐
Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流...
图片转换成字节流先要转换的IMage对象,转换之后返回字节流。字节流转换成图片,要转换的字节流,转换得到的Image对象,根据图片路径返回图片的字节流,感兴趣的朋友看下下面的代码。 C#将图片和字节流相互转换代码...
非常方便的字节操作插件 可用于网络消息解包压包,字节组装 流协议传输
字节流下载到本地.字节流下载到本地.txt字节流下载到本地.txt
JAVA 字符流与字节流
Java中的字节流.
Java字符流和字节流
有时我们不知道接收到的字节流是何种编码的字节流,当转换成字符串的时候也就不能正确转换。例如,实现pop3协议时,我接收到的网络比特流不知是utf-8还是gb2312,解码邮件时就可能会出现乱码。而此代码是判断接收到...
Java IO字符流和字节流,讲述了字符传输流和字节传输流的不同和作用
字节流工具,
字节流编码获取原来这么复杂,但也很简单.rar
Java字节流 .pdf 学习资料 复习资料 教学资源
IO流学习(字节流 字符流 文本流)!
File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...
字节流与字符流的练习文档,内附一个简要的记事本综合文档。
数据流,对象流,字节流,字符流 的一些总结说明
javaIO操作各种文件,筛选文件,拷贝文件,上传下载,字符流和字节流都有,根据实际项目情况直接贴就可以了,根据文件类型选择不同的testclss就可以。全部使用效率最高的流
JAVA 语言 Packet字节流解析工具说明
java字节流相关操作,int转换成byte字节数组,String转换为byte字节数组,bcd码转换。
下面的程序中是使用字节流 读写文件。 注意: 什么是编码? 将 字符串 转换成 字节 这叫编码。 在文件中写东东的时候要使用编码,因为电脑只知道 0 1 代码。 - 什么是解码? 将 字节 转换成 字符串 这叫解码。...