黑马程序员-笔记-09-IO字节流
来源:互联网 发布:js定义字符串数组 编辑:程序博客网 时间:2024/05/23 01:09
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
java字节流:InputStream,OutputStream
字符流在处理文本时,更加迅速,但是处理一些二进制数据时,则会造成内容的错误。这是需要使用等到字节流。来操作。
一个例子列举字节流的使用。
public class Play27 {/*** 字节流:InputStream OutputStream*/public static void main(String[] args) throws IOException { //writeFile(); //readFile(); long start = System.currentTimeMillis(); copyImage(); long end = System.currentTimeMillis(); System.out.println(end - start);}public static void readFile() throws IOException { FileInputStream fis = new FileInputStream("test.txt"); int num = fis.available();// 获得文件的字节数。 System.out.println(num); // int ch =0;//注意字节流为什么返回值不是字节,而是int型 // while((ch=fis.read())!=-1){//一次只读取一个字节的方法。 // System.out.println((char)ch); // } //byte[] buf = new byte[num];// 定义一个缓冲区,大小刚好等于文件大小,不用循环。 //fis.read(buf); //System.out.println(new String(buf)); byte[] buf = new byte[3];//定义一个缓冲区。 int length =0; while((length=fis.read(buf))!=1)//一次将缓冲区读满。如读完则返回空。 System.out.println(new String(buf,0,length)); fis.close();}public static void writeFile() throws IOException { File file = new File("test.txt"); System.out.println(file.getAbsolutePath()); FileOutputStream fos = new FileOutputStream(file); fos.write("test,中国".getBytes());// 字节流不用刷新。需要将String转换为字节数组。 fos.close();} //使用字节流实现图片的复制。public static void copyImage() { FileOutputStream fos = null; FileInputStream fis = null; try { fos = new FileOutputStream("test001.jpg"); fis = new FileInputStream("test.jpg"); byte[] buf = new byte[3]; int num = 0; while ((num = fis.read(buf)) != -1) { System.out.println(new String(buf,0,num)); fos.write(buf, 0, num); } } catch (Exception e) { } finally { if (fos != null) { try { fos.close(); } catch (Exception e) { } finally { if (fis != null) { try { fis.close(); } catch (Exception e) { } } } } }} //java带缓冲的字节流, 其功能不再赘述。public static void copyImageBuf() throws IOException{FileOutputStreamfos = new FileOutputStream("test1.jpg");FileInputStream fis = new FileInputStream("笑尿1.jpg");BufferedInputStream bis = new BufferedInputStream(fis);BufferedOutputStream bos = new BufferedOutputStream(fos);int b = 0;while((b=bis.read())!=-1){bos.write((char)b);}bis.close();bos.close();}} /** * * 装饰类完成BufferedInputStream * 缓冲功能是如何实现的。 */class MyBufferedInput{ private InputStream input; private int num,count; private byte[] buf = new byte[1024]; public int myRead() throws IOException{ if(count==0){ num=0; count = input.read(buf); if(count<0) return -1; byte b = buf[num]; count -- ; num++; return b&255;//为什么返回值要返回b&255,/** b为byte型,因为最后要返回一个-1来判断,是否将文件读到最后,所以返回int型。* 这样就有一个问题:* 如果文件中恰好有一个字节的二进制:11111111,这个值转换成int恰好是-1,这样其实* 并没有读到文件的末尾,系统就返回-1,导致最后判断失败。* 避免这个问题,就需要让返回值在返回的时候,byte-->int,在前面的位置上补为禁止的时候,不补一,而是补零* 这样他的返回值就是255,从而可以避免,b&255就是这个操作。* * 从byte-->int,是将八位二进制转换为三十二位的过程,那么这样岂不是把文件变大了,的确,但是,OutputStream* 的write方法,有一个自动取最后八位的做法,所以,并没有影响。*/ }else if(count >0){ byte b = buf[num];//带缓冲的流,一次独处一定数目的字节,你每次去读的时候,他是缓冲部分取出来,降低了每次读出的时间。 count -- ; num++; return b&255; } return -1; }}
- 黑马程序员-笔记-09-IO字节流
- 黑马程序员---IO--字节流
- 黑马程序员----java IO-字节流 学习笔记
- (黑马程序员)学习笔记,IO输入输出(字节流)
- 黑马程序员:IO流之字节流
- 黑马程序员 IO流-->字节流
- 黑马程序员--IO流02--字节流
- 黑马程序员--IO流--字节流
- 黑马程序员-day19-IO流(字节流)
- 黑马程序员:IO流之字节流
- 黑马程序员--IO流之字节流
- 黑马程序员:IO流之字节流
- 黑马程序员---IO流-字节流
- 黑马程序员--IO流之字节流
- 黑马程序员-java基础 io字节流
- 黑马程序员--IO之字节流
- 黑马程序员----【javaSE基础】IO--字节流
- 黑马程序员——IO字节流
- mac下安装groovy
- linux驱动学习--第十九天:第十一章:CPU 与内存和I/O(二):设备I/O 端口和I/O 内存的访问
- 黑马程序员-笔记-08-IO字符流
- How to display error messages?
- HDU 2444 The Accomodation of Students 判断二分图 + 最大匹配
- 黑马程序员-笔记-09-IO字节流
- jspSmartUpload组件说明
- 一个使用cv::Mat按单通道读取数据然后按照灰度范围设置灰度的例子
- “有毒”移动电源Android版的设计及其实现
- 黑马程序员-笔记-10-IO其他
- 怀念的东西:魔方
- DTD的定义规则和编写
- 关于android手机不能识别SD卡的解决
- ASP.NET 为什么要有 MVC