文件输入流java.io.FileInputStream类继承自字节输入流InputStream类,表示从文件中读取二进制数据到程序中:
public class FileInputStreamDemo01{public static void main(String args[]) throws Exception{//先向文件中写入数据,以便下面进行读取File f1=new File("e:"+File.separator+"test.doc");OutputStream out=new FileOutputStream(f1,true);String message2="\r\n浙江师范大学行知学院";byte[] b2=message2.getBytes();for(int i=0;i
因为开辟了1024字节的内存空间,但是写入的数据量显然没有1024字节。因此要是将这个1024大小的字节数组重新构建成字符串,这个字符串的长度或者说大小也将是1024字节。那么其中的多余字节就是由空格占位形成的。
运行效果如下:
显然我们并不希望看到这样的结果。那么如何解决?
修改如下:
public class FileInputStreamDemo02{public static void main(String args[]) throws Exception{File f1=new File("e:"+File.separator+"test.doc");OutputStream out=new FileOutputStream(f1,true);String message2="\r\n浙江师范大学行知学院";byte[] b2=message2.getBytes();for(int i=0;i
因为在重新构造字符串时是依据实际读取的字节大小构建的,因此新的字符串将不会有空格占位的情况。
上面的程序虽然解决了部分的问题,但在构建字节数组用于存储读取内容是开辟的内存空间是固定不变的,这样的设计极不合理。因为假如需要读取的数据量大于1024字节,这样1024字节之后的数据将无法读取。那么能不能按照文件大小构建字节数组呢?能!
实例3:
public class FileInputStreamDemo03{public static void main(String args[]) throws Exception{File f1=new File("e:"+File.separator+"test.doc");OutputStream out=new FileOutputStream(f1,true);String message2="\r\n浙江师范大学行知学院";byte[] b2=message2.getBytes();for(int i=0;i
这样的修改就能使内存资源得到最大限度的利用。
下面使用另一种读取数据的方式。
实例4:
public class FileInputStreamDemo04{public static void main(String args[]) throws Exception{File f1=new File("e:"+File.separator+"test.doc");OutputStream out=new FileOutputStream(f1,true);String message2="\r\n浙江师范大学行知学院";byte[] b2=message2.getBytes();for(int i=0;i