文档章节

字节输出、输入流 OutputStream、 InputStream

o
 osc_wws45aot
发布于 2019/08/21 16:01
字数 1152
阅读 26
收藏 0

精选30+云产品,助力企业轻松上云!>>>

@[toc]

字节输出流 OutputStream

void close() 关闭此输出流并释放与此流有关的所有系统资源。

void flush() 刷新此输出流并强制写出所有缓冲的输出字节,针对字符流有效

void write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流。

void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

abstract void write(int b) 写一个字节

    OutputStream os = new FileOutputStream("hello.txt");
    os.write("good".getBytes());
    byte[] bys = {97,98,99,100};
    os.write(bys, 1, 2);
    os.write(100);
    os.flush();
    os.close();

// 输出结果 hellowordbcd

FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。

FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。

结合异常处理的 IO流写法

    System.out.println("Start");
    try (OutputStream os = new FileOutputStream("Test.txt");
        Scanner input = new Scanner(System.in);
            ){
        os.write("HelloWorld".getBytes());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("End");

字节输入流 InputStream

方法摘要

int available() 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。 void close() 关闭此输入流并释放与该流关联的所有系统资源。 void mark(int readlimit) 在此输入流中标记当前的位置。 boolean markSupported() 测试此输入流是否支持 mark 和 reset 方法。 abstract int read() 从输入流中读取数据的下一个字节。

  **特点:** 
  	1.表示一次性读取一个字节
  	2.每读取一个字节,那么返回的实际读取的内容
  	3.读取一个字节完毕,会自动等待读取下一个字节,类似迭代器的 cursor
  	4.读取到文件末尾返回 -1

int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 int read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节读入 byte 数组。 void reset() 将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。 long skip(long n) 跳过和丢弃此输入流中数据的 n 个字节。

​ 文件 -> 内存 输入流 FileInputStream ​ 内存 -> 文件 输出流 PrintStream

注意: ​ 1.输出流如果文件不存在会自动创建,但是输入流文件必须存在,否则会抛出 FileNotFoundException ​ 2.一次读取一个字节 ,如果中间认为对每个字节做了强制类型转换,可能会导致乱码

int read(byte[] b)

1.一次性从外界读取一个字节数组的内容

2.每读取一次,返回实际读取的长度

3.读取到文件末尾返回 -1

4.每读取一次,指针向后移动一个字节数组的单位

注意:

虽然扩大了每次读取的范围,但是乱码现象依然存在,所以字节流读取一个字节或者字节数组,但是GBK或者UTF-8编码表中一个中文占 2个或者3个字节,肯定有可能乱码,所以还是不推荐字节流处理中文。

    InputStream is = new FileInputStream("d:\\test.txt");
    byte[] bys = new byte[1024];
    int len = 0;
    while ((len = is.read(bys)) != -1) {
        System.out.print(new String(new String(bys, 0, len)));
    }

字节输入流 + 字节输出流、拷贝文件

test.java --> test.txt

数据源: test.java

目的地: test.txt

流向:

文件 -> 内存 FileInputStream

内存 -> 文件 FileOutputStream

拷贝方式:

1.一次性拷贝一个字节

2.一次性拷贝一个字节数组

1.一次性拷贝一个字节

/*
 * 功能: 一次性拷贝一个字节拷贝文件
 * 返回值类型 : void
 * 参数列表: String srcFileName, String descFileName
 * 方法名: copy
 */
public static void copy(String srcFileName, String descFileName) {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
        fis = new FileInputStream(srcFileName);
        fos = new FileOutputStream(descFileName);

        int by = 0;
        while ((by = fis.read()) != -1) {
            fos.write(by);
            fos.flush();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

2.一次性拷贝一个字节数组

/*
 * 功能: 一次性拷贝一个字节数组拷贝文件
 * 返回值类型 : void
 * 参数列表: File srcFile, File descFile
 * 方法名: copy
 */
public static void copy(File srcFile, File descFile, int capacity) {
    try (FileInputStream fis = new FileInputStream(srcFile);
            FileOutputStream fos = new FileOutputStream(descFile);) {
        byte[] bys = new byte[capacity];
        int len = 0;

        while ((len = fis.read(bys)) != -1) {
            fos.write(bys, 0, len);
            fos.flush();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } 
} 
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Java网络编程-文件上传案例-客户端

Java网络编程 文件上传案例 客户端 目的:读取本地文件,上传到服务器,读取服务器回写的数据 明确: 数据源:c:\1.jpg 目的地:服务器 实现步骤: 创建一个本地字节输入流FileInputStream对...

寂寞丶沙舟
03/24
4
0
java学习ing——初识IO流

之前是学习到了有关文件的操作,主要是对文件进行创建删除查找搜索等等。~现在就可以对文件进行一些简单的操作了。比如读和写~ 这里所说的IO流就是对应的InputStream和OutputStream。分别是字...

卢瑶
2014/11/27
19
0
java中的IO流

  在java.io包中流的操作主要有字节流、字符流两大类,并且两个都具备输入输出的操作。   在字节流中输出数据主要使用OutputStream类完成,输入则是InputStream类。   在字符流中输出数...

osc_03aaqmm8
2019/09/17
2
0
java_io起步

#Java IO流总结 java 的io系统简单介绍 io体系 在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable ...

osc_zh10j2cp
2019/09/08
1
0
笔记-迎难而上之Java基础进阶6

文件复制 字符输入流Reader类 Reader类是字符流最顶层的类 成员方法: int read() 读取单个字符并返回 int read(char[] cubf)一次性读取多个字符,将字符读入数组 void close() 关闭流并释放资...

osc_r590b6ja
2019/05/27
1
0

没有更多内容

加载失败,请刷新页面

加载更多

是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
26
0
【LeetCode】53 盛最多水的容器

题目 解题思路 双指针法: https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/ 代码 public class Solution { ......

JaneRoad
昨天
20
0
阿里云OSS配置CDN加速

首先购买CDN流量包 然后添加域名 添加好后 然后将域名OSS.xxxx.com 解析到 生成的CDN域名上 这样就完成了

可达鸭眉头一皱
昨天
16
0
js 整数与小数正则替换片段

说明 /(\d+)/g 整数 /(\d+\.\d+)rem/g 小数 /(\d+\.\d+|\d+)rem/g 其中 | 或 条件 例子 全局查找带 rem 单位的,替换成 px 单位 let text = text.replace(/(\d+\.\d+|\d+)rem/g, function(s......

DrChenXX
昨天
17
0
ubuntu下minicorba例子

一、开发环境安装 sudo apt install omniorb omniorb-idl omniidl libomniorb4-dev libomniorb4-2 omniorb-nameserver libomnithread4 libomnithread4-dev 二、源文件: Hi.idl module ......

wangxuwei
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部