IO 流 自定义字节流的缓冲区-read 和write 的特点
1 package com.yyq; 2 /* 3 * 字节流的缓冲区 4 * 为什么会造成这种问题呢? 5 * 小原理: 第一个字节返回的是 -1??? 为什么会是 -1呢?? 6 * 11111110000110101000 7 * 读一个字节 ,读取到了8个二进制位 1111-1111 -1 8 * byte 类型 的 -1 --------》int: -1 9 * 11111111 -1 读到连续八个1 就会停下来 10 * 补位的时候 它补的是 00000000 能保证不会停下来 11 * 那么只要在前面补0 ,既可以保留原字节的数据不变,又可以避免-1的出现 12 * 11111111 11111111 11111111 11111111 13 * 00000000 00000000 00000000 11111111 14 * ------------------------------------ 15 * 00000000 00000000 00000000 11111111 进行与操作 16 * read 进行了强制转换,将最低8位保留下来了 17 * write 方法在提升,4个字节 18 * 这种机制保证了数据的原样性 19 */ 20 import java.io.*; 21 class MyBufferedInputStream{ 22 private InputStream in; 23 24 private byte[] buf = new byte[1024]; 25 private int pos = 0; 26 private int count = 0; 27 MyBufferedInputStream(InputStream in){ 28 this.in = in; 29 } 30 // 自定义一个read 方法 31 //一次读一个字节,重缓冲区)(字节数组)获取 32 public int myRead() throws IOException{ 33 // 通过in对象读取硬盘上的数据,并存储在buf中 34 if(count == 0){ 35 36 count = in.read(buf); 37 if(count<0){ 38 return -1; 39 } 40 pos = 0; 41 byte b = buf[pos]; 42 count--; 43 pos++; 44 return b&255; 45 } 46 else if(count>0){ 47 byte b = buf[pos]; 48 count--; 49 pos++; 50 return b&255; 51 } 52 return -1; 53 } 54 public void myClose() throws Exception{ 55 in.close(); 56 } 57 } 58 public class CopyMP3 { 59 public static void main(String[] args) throws Exception { 60 long start = System.currentTimeMillis(); 61 copy_1(); 62 long end = System.currentTimeMillis(); 63 System.out.println(end-start); 64 } 65 public static void copy_1() throws Exception{ 66 MyBufferedInputStream bufis = new MyBufferedInputStream( 67 new FileInputStream("1.jpg")); 68 BufferedOutputStream bufos = new BufferedOutputStream( 69 new FileOutputStream("2.jpg")); 70 byte[] buf = new byte[1024]; 71 int num = 0; 72 while((num = bufis.myRead())!=-1){ 73 bufos.write(num); 74 } 75 } 76 }
转载于:https://www.cnblogs.com/yangyongqian/p/5153271.html
IO 流 自定义字节流的缓冲区-read 和write 的特点相关推荐
- java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛?
原标题:Java的IO流之字节流,必须要学得内容,你会嘛? 伙伴们~ 端午节过的如何呀~ 有没有很开心呀~ 假期已过咱们继续开动了 IO流 先来认识一下IO流: IO流用来处理设备之间的数据传输,Ja ...
- Io流的字节流与缓冲流
当我们队大量数据进行保存时可以用数组,当数据到达一定量时或给用户一个易懂得接口时就可采用IO流: IO流按进行的操作分输出流与输入流InputStream与OutputSteam 按操作的原理来分有 ...
- JavaSE(十七)——IO流之字节流
文章目录 1. 概述 2. FileOutputStream写出数据 3. FileInputStream读取数据 4. 字节流复制文本文件 5. 字节流复制MP3 6. 高效的字节输入输出流 1. ...
- IO流、字节流和字符流
Java 一.IO流 1.1 概念 1.2 分类 1.3 IO流的父类 二.字节流 2.1 概念 2.2 OutputStream 2.2.1 常用方法 2.2.2 FileOutputStream类 ...
- IO流之字节流字符流理解
目录: 一.什么是IO流 : 二.流的分类: 三.字节流解析: 四.字符流解析: 五.序列流(合并流): 一.什么是IO流 简单说就是将数据(文本,音频,视频,图片等)以流的形式进行读写. 举个栗子 ...
- java -- IO流之字节流
Java类库中的IO类,可以从不同的角度将其进行不同的分类.比如按数据的流向可分分为输入流和输出流:按数据处理单位的不同,又可将其分为字节流和字符流.但不管怎样分,其本质都是一样的.本人更倾向将其分成 ...
- java基础10(IO流)-字节流
IO流 输入与输出[参照物是程序] 如果从键盘.文件.网络甚至是另一个进程(程序或系统)将数据读入到程序或系统中,称为输入 如果是将程序或系统中的数据写到屏幕.硬件上的文件.网络上的另一端或者是一个进 ...
- IO流,字节流文件拷贝示例 [FileInputStream FileOutputStream]
字节流文件拷贝FileInputStream FileOutputStream: import java.io.File; import java.io.FileInputStream; import ...
- IO流,字节流和字符流
一.概述 IO流用来处理设备之间的数据传输 上传文件和下载文件 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 二.IO流的分类: (1)流向: 输入流 读取 ...
最新文章
- torch_{geometric/scatter}中一些函数的用法(softmax,scatter)
- 韩文版ie8 启用java_只有在启用了javascript的情况下,IE8才会在IE8模式下重新加载崩溃...
- 共享内存生产者消费者模型
- Cheerleaders【容斥】
- [转载] java中的经典问题:传值与传引用
- Could not find module ‘D:\codna\Library\bin\geos_c.dll‘
- 力扣326.3的幂 C/C++
- 微软对 Windows 10 Mobile 的支持将于12月10日结束
- 使用 matlab 数据集的生成(generate datasets)
- 如何在Mac上创建和移除替身
- 研发管理系统选型必读
- 连接NI采集箱9181与9184
- 使用Github上传本地项目代码
- 缓冲流、转换流、序列化流、装饰设计模式、comms-io工具包
- mysql+两行+一样+筛选_Excel两行交换及两列交换,快速互换相邻表格数据的方法...
- java 实现站内信_站内信设计
- Kotlin 正则表达式
- 分享wifidog的增强版: wifidogx
- 多个计算机组成一个,怎么将两台计算机组成一个集群?
- conda创建环境并下载d2l软件包