做专业慢摇的网站,石家庄房产信息网站,网站建设优化课程,wordpress搜索表单目录
文件字节输入流#xff1a;每次读取多个字节
实例演示
注意事项
文件字节输入流#xff1a;一次读取完全部字节
方式一
方式二
注意事项 文件字节输入流#xff1a;每次读取多个字节 用到之前介绍过的常用方法#xff1a; 实例演示
需求#xff1a;用每次读取…目录
文件字节输入流每次读取多个字节
实例演示
注意事项
文件字节输入流一次读取完全部字节
方式一
方式二
注意事项 文件字节输入流每次读取多个字节 用到之前介绍过的常用方法 实例演示
需求用每次读取多个字节的方法读出File文件的内容 import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;public class FileInputStreamTest2 {public static void main(String[] args) throws Exception {//1.创建一个字节输入流对象代表字节输入流管道与源文件接通。InputStream is new FileInputStream(HelloWorld\\src\\file.txt);//2.开始读取文件中的字节数据每次读取多个字节。//public int read(byte b[]) throws IoException//每次读取多个字节到字节数组中去返回读取的字节数量读取完毕会返回-1byte[] buffer new byte[3];int len is.read(buffer);String rs new String(buffer);System.out.println(rs);System.out.println(当前读取的字节数量 len);//目标文件有5个字节需要再读取一次//注意读取多少倒出多少int len2 is.read(buffer);String rs2 new String(buffer,0,len2);System.out.println(rs2);System.out.println(当前读取的字节数量 len2);int len3 is.read(buffer);System.out.println(len3); //-1is.close(); //关闭流}
}运行结果 使用循环改造一下
package user.IOTestOne;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;public class FileInputStreamTest2 {public static void main(String[] args) throws Exception {//1.创建一个字节输入流对象代表字节输入流管道与源文件接通。InputStream is new FileInputStream(HelloWorld\\src\\file.txt);//使用循环byte[] buffer new byte[3];int len; //记住每次读取了多少个字节while((len is.read(buffer)) ! -1){//注意读取多少倒出多少String rs new String(buffer,0,len);System.out.println(rs);}//性能得到了明显的提升//但是这种方案也不能避免读取汉字输出乱码的问题is.close(); //关闭流}
}运行结果 注意事项
使用FilelnputStream每次读取多个字节读取性能得到了提升但读取汉字输出还是会乱码。
使用字节流读取中文如何保证输出不乱码怎么解决
定义一个与文件一样大的字节数组一次性读取完文件的全部字节。
文件字节输入流一次读取完全部字节 方式一
自己定义一个字节数组与被读取的文件大小一样大然后使用该字节数组一次读完文件的全部字节。
方法名称说明public int read(byte[] buffer)每次用一个字节数组去读取返回字节数组读取了多少个字节如果发现没有数据可读会返回-1.
注意文件存于硬盘中硬盘的大小是极大的文件的大小也可能会很大但是我们定义的数组实际上存储于内存中内存是很小的无法给数组定义很大的长度因此这个方法只适合读取不那么大的文件。
选取案例还是那个File文件
package user.IOTestOne;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class FileInputStreamTest3 {public static void main(String[] args) throws Exception{//1.创建一个字节输入流管道与源文件接通InputStream is new FileInputStream(HelloWorld/src/file.txt);//2.准备一个字节数组大小与文件的大小正好一样大。File f new File(HelloWorld/src/file.txt);long size f.length();byte[] buffer new byte[(int) size];int len is.read(buffer);System.out.println(new String(buffer));System.out.println(文件大小 size 字节);System.out.println(len);is.close();}
}运行结果 方式二
Java官方为lnputStream提供了如下方法可以直接把文件的全部字节读取到一个字节数组中返回。
方法名称说明public byte[] readAllBytes(throws IOException直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class FileInputStreamTest3 {public static void main(String[] args) throws Exception{//1.创建一个字节输入流管道与源文件接通InputStream is new FileInputStream(HelloWorld/src/file.txt);byte[] buffer is.readAllBytes(); //JDK8 之后新增的方法System.out.println(new String(buffer));is.close();}
}运行结果 注意事项
直接把文件数据全部读取到一个字节数组可以避免乱码是否存在问题
如果文件过大创建的字节数组也会过大可能引起内存溢出。
其实读写文本内容本适合用字符流。
字节流适合做数据的转移如文件复制等。
下篇就开始介绍字符流。 END 学习自黑马程序员——Java课程