为什么关闭一个缓冲区输出流之前应使用flush方法?

为什么关闭一个缓冲区输出流之前应使用flush方法?,第1张

这要搞清楚缓冲区的原理了,缓冲区其实就是封装了一个数组,对数据进行临时缓冲,存满后再集中对数据进行 *** 作,这也是提高流 *** 作数据效率的原因,当缓冲区存满后会自动对数据进行 *** 作,不刷新也可以,但是如果不存满就必须刷新了才能把数据刷到目的地,打个比方,默认缓冲区大小是8k,如果你是用缓冲区 *** 作10k的数据,你使用了flush方法那么数据不会有丢失,但是如果没有使用fulsh方法那么得到得数据只有8k,剩下的2k会丢失,还有不明白的欢迎留言,一家之言各位有什么高见欢迎多多指教

//java中使用文件输入流和文件输出流进行文件读写的用例!           
Java 
   package comtestio; 
import javaioFile; 
import javaioFileInputStream; 
import javaioFileNotFoundException; 
import javaioFileOutputStream; 
import javaioIOException; 
import javaioInputStream; 
import javaioOutputStream; 

   
  @author 亚当爱上java 
  用例内容:文件输入流和文件输入流结合用例,字节流方式 
 时间:2010-06-20 
  注意事项:文件输入流和文件输出流都是相对与内存来说的,例如通过程序读取文件时往内存输入数据就是文件输入流 

public class FileInputOrOutput { 
 public static void main(String[] args) { 
  // 文件或者路径名的抽象表现形式,意思就是说之后如果进行 *** 作的话就是全部在这个抽象路径名所指向的文件或者文件加中 
  File file = new File("e:/testtxt"); 
  File file2 = new File("e:/test1txt"); 
   
  // 文件字节数的个数 
  // Systemoutprintln(filelength()); 
  try { 
   /------------------------------------------读 *** 作部分-----------------------------------------------/ 
   //文件输入流对象 
   InputStream fis = new FileInputStream(file); 
   // 文件输入流对象所读取的字节数大小 
   // Systemoutprintln(fisavailable()); 
   / 
     1按照一个字节为单位进行读取数据,弊端是遇到中文就会把中文的汉字拆开从而出现乱码 
    / 
   // //流对象读出的返回值是每次所读到的一个字符所对应的ascii码值 
   // int i = fisread(); 
   //    
   // //如果已经读到文件尾则i==-1,此时终止循环 
   // while(i!=-1){ 
   // Systemoutprint((char)i); 
   // 保证每一次循环都继续往后读取一个字符,否则i的值不变会成为死循环 
   // i = fisread(); 
   // } 
   / 
     2按照一个字节数组所指定的大小为单位进行读取,每次最多可以读取数组定义的大小的字节个数 
    / 
   // 每次读取都以1K字节作为单位来进行 
   byte b[] = new byte[1024]; 
   // 流对象读出并返回的是每次读取字节的个数,最大每次读取自己数可以和数组blength相同 
   // b中存储了每次所读取的所有数据 
   int i = fisread(b); 
   String str = ""; 
   // 如果已经读到文件尾则i==-1,此时终止循环 
   while (i != -1) { 
    // 把每次读取的字节数组解码为字符串 
    // 参数1:要解码为字符的字节 
    // 参数2:要解码的首字符的索引 
    // 参数3:要解码的字节的个数,如果文件个数大于所设定的一次读取文件的大小时i的取值就是 
    // blength,否则小于数组的字节大小时则为实际的读取出自己数的大小 
    str = str + new String(b, 0, i); 
    // 保证每一次都往文件的下一部分进行读取,否则i值没有变化会成为死循环 
    i = fisread(b); 
   } 
   // Systemoutprint(str); 
   // 关闭输入流对象 
   fisclose(); 
   
   /------------------------------------------写 *** 作部分-----------------------------------------------/ 
   //文件输出流对象 
   OutputStream fos = new FileOutputStream(file2); 
    
   //str是从file所指定的文件中读出的所有内容,将此内容写入另一个文件中 
   //将字符解码为字节数组 
   byte b2[] = strgetBytes(); 
    
   //将解码后的字节数组,通过文件输出流对象写入到缓冲区中 
   foswrite(b); 
   //强制将缓冲区中的内容输出到文件中 
   fosflush(); 
   //关闭输出流对象 
   fosclose(); 
    
  } catch (FileNotFoundException e) { 
   // TODO Auto-generated catch block 
   eprintStackTrace(); 
  } catch (IOException e) { 
   // TODO Auto-generated catch block 
   eprintStackTrace(); 
  } 
 } 
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13342086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-18
下一篇 2023-07-18

发表评论

登录后才能评论

评论列表(0条)

保存