说来惭愧,工作一年多了,对io仍然不是很了解。不仅是io,还有网络,还有多线程。shame!!!

接下来的日子里,先搞多线程,再搞io,再搞网络,半年内一定要完成!

好了,今天终于搞懂了outputStream 的三个write的区别,这里小记一下

1.文档里的说明

write(byte[] b) 
          Writes b.length bytes from the specified byte array to this file output stream.

write(byte[] b, int off, int len) 
          Writes len bytes from the specified byte array starting at offset off to this file output stream.

write(int b) 
          Writes the specified byte to this file output stream.

2.理解

① write(byte[] b) 是每次写b.length个字节,即使最后一个byte数组里面没读满,也会写b.lenth个字节

eg:

FileInputStream in = new FileInputStream(new File("C:/Users/admin/Desktop/js/node.txt"));
byte b[] = new byte[50];
FileOutputStream out = new FileOutputStream(new File("C:/Users/admin/Desktop/js/node1.txt"));
int len = 0;
System.out.println("总长度"+in.available());
while(( len = in.read(b))!=-1){
System.out.println(len);
out.write(b);
}
in.close();
out.flush();
out.close();

原文件内容

写出的文件

控制台输出

可以看出,由于最后一次读取的字节其实只有4个,但是输出的文件却多了很多(46个字节应该),好像是把上一次读取的内容写入了

所以,即使最后一个byte数组里面没读满,也会写b.lenth个字节

② write(byte[] b, int off, int len)

off一半是0

len 就是这次该写多少个字节

把上面的代码改为

FileInputStream in = new FileInputStream(new File("C:/Users/admin/Desktop/js/node.txt"));
byte b[] = new byte[50];
FileOutputStream out = new FileOutputStream(new File("C:/Users/admin/Desktop/js/node1.txt"));
int len = 0;
System.out.println("总长度"+in.available());
while(( len = in.read(b))!=-1){
System.out.println(len);
out.write(b,0,len);
}
in.close();
out.flush();
out.close();

区别在于out.write 方法

这样的话,写出的文件就没有问题了,最后一次读取4个字节,就写4个字节。

③ write(int b)

Writes the specified byte to this output stream. The general contract for write is that one byte is written to the output stream. The byte to be written is the eight low-order bits of the argument b. The 24 high-order bits of b are ignored.

不懂。。。

java-IO小记的更多相关文章

  1. Java JPA小记

    什么是JPA JPA之于ORM(持久层框架,如MyBatis.Hibernate等)正如JDBC之于数据库驱动. JDBC是Java语言定义的一套标准,规范了客户端程序访问关系数据库(如MySQL.O ...

  2. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  3. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  4. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  5. java Io流向指定文件输入内容

    package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...

  6. java Io文件输入输出流 复制文件

    package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  7. java Io流更新文件内容

    package com.hp.io; import java.io.FileOutputStream; import java.io.IOException; public class FileOut ...

  8. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  9. java.io.NotSerializableException: test.io.file.Student

    java.io.NotSerializableException: test.io.file.Student    at java.io.ObjectOutputStream.writeObject0 ...

  10. java.io.IOException: mark/reset not supported

    java.io.IOException: mark/reset not supported at java.io.InputStream.reset(InputStream.java:348) at ...

随机推荐

  1. sed--行编辑器命令

    2017-11-02 sed:行编辑器,按行处理:默认不做原文件修改,会在sed自身的模式空间中按行读相关的数据并完成编辑,然后显示到屏幕上     一.     基本用法: 1. 语法格式: sed ...

  2. myeclipse上down出的svn项目,文件后面不显示版本号和修改人

    找到 windows ->preferences->General->Appearance->Lable Decorations 下拉找到svn 勾选上

  3. PL/SQL数据库开发那点事

    PL/SQL数据库开发那点事-->编程,存储程序 在SQL*plus 中编写PL/SQL程序,并在SQL*plus 中执行它, PL/SQL块的代码就存放在SQL*plus的缓冲区中.如果在SQ ...

  4. Jmeter Grafana Influxdb 环境搭建

    1.软件安装 1.Grafana安装 本文仅涉及Centos环境 新建Grafana yum源文件 /etc/yum.repos.d/grafana.repo [grafana] name=grafa ...

  5. 基于spring和mybatis的简单项目流程

    Mybatis整合Spring配置 第一部分:配置Spring框架 配置SpringMVC的步骤 配置流程图 SpringMVC配置 导入包(基本包5个,1日志依赖包,2webmvc支持包) 构建一个 ...

  6. jsp基础知识总结

    1.了解jsp,jsp有什么有利的,有什么弊端. jsp是serlet的扩展,在web应用中,每个jsp页面都会有servlet容器生产对应的servlet. jsp通过在标准的html页面中插入ja ...

  7. nginx基础学习第二篇:nginx内置变量的使用

    ngx_http_core模块提供的内置变量有很多,常见的有 $uri,用来获取当前请求的uri,不含请求参数. $request_uri,用来获取请求最原始的uri,包含请求参数,且未解码. $re ...

  8. stm32CubeMx 实现单通道ADC DMA采集

    今天要做的是ADC单通道DMA采集实验 MCU : STM32F429 开发工具:STM32CubeMx 版本号 5.0.0 实验目的:实现ADC1 13通道 DMA采集 一 :简介 首先,我们来看一 ...

  9. Oracle 客户端管理软件安装

    1.首先,先说明下为什么要安装Oracle客户端管理工具? 因为Oracle服务端过大,而且消耗的资源过多,大部分公司会把服务端装在公司的服务器上,而不会装在员工的电脑上,所以这个时候就需要使用Ora ...

  10. CCF 201409-4 最优配餐

    问题描述 试题编号: 201409-4 试题名称: 最优配餐 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么 ...