IO ——字节流
什么是流?
概念:内存与存储设备之间传输数据的通道。程序运行后保存在内存,文件一般在硬盘中,在程序中读写文件,需要在内存和存储设备中建立通道。数据借助流传输
流的分类:
按流向:
- 输入流:将存储设备中的内容读入到内存中
- 输出流:将内存中的内容写入到存储设备中
按单位:
- 字节流:以字节为单位,可以读写所有数据。因为所有数据都是以字节的方式来存储的
- 字符流:以字符为单位,只能读写文本数据。
按功能:
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础之上增强功能
字节流:
- 字节输入流: InputStream类
方法:
int availble() //返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字数
void close() //关闭此输入流并释放与该流关联的所有系统资源
void mark(int readlimit) //在此输入流中标记当前位置
abstract int read() //从输入流中读取数据的下一个字节
int read(byte[] b) //从输入流中读取一定数量的字节,并将其存储在缓存区数组b中
int read(byte[] b, int off, int len) //在指定位置将输入流中最多len个数据字节读入b数组
void reset() //将此流重新定位到最后一次对此输入流调用mark方法时的位置
long skip(long n) //跳过和丢弃此输入流中数据的n个字节
- 字节输出流: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 wite(int b) //将指定的字节写入此输出流
InputStream类和OutputStream类都是抽象类,不能实例化,应该用其子类,可用FileInputStream和FileOutputStream。
FileInputStream:
构造方法:FileInputStream(File file)
FileInputStream(String name) //name指文件路径
FileInputStream(FileDescriptor fdObj)
方法:
protected void finalize() //确保文件不再引用文件输入流时调用close方法
FileOutputStream:
构造方法:FileOutputStream(String name) //每次写入都会覆盖原有的数据
FileOutputStream(String name, boolean append) //不覆盖原有数据
FileOutputStream(File file)
FileOutputStream(File file, boolean append)
FileOutputStream(FileDescriptor fdObj)
FileOutputStream(FileDescriptor fdObj, boolean isFdOwner)
package com.java.leetcode.io; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays; /*
演示FileInputStream(文件字节输入流)
演示FileOutputStream(文件字节输出流) */
public class Stream01 {
public static void main(String[] args) throws IOException {
//1.创建FileInputStream,文件可能没有,需要抛出异常
FileInputStream fis = new FileInputStream("D:\\stream01.txt");
//读取数据 单个字节fis.read() 效率低下
// int data;
// while ((data = fis.read()) != -1){ //fis.read()返回下一个字节,如果读到结尾返回-1
// System.out.print((char)data);
// }
byte[] buffer = new byte[3];
//比较拉垮,不采用,直接用循环读
// int count = fis.read(buffer); //该方法返回实际返回的个数
// System.out.println(new String(buffer)+"读取的字节数"+count); //hel只读了3个
// int count1 = fis.read(buffer); //接着读
// System.out.println(new String(buffer)+"读取的字节数"+count1); //lo 读取了三个
// int count2 = fis.read(buffer); //接着读
// System.out.println(new String(buffer)+"读取的字节数"+count2);//io读取了2个
int count = 0;
while ((count = fis.read(buffer)) != -1){
System.out.println(new String(buffer)+"读取的字节数"+count);
}
//2.创建FileOutputStream
//FileOutputStream fos = new FileOutputStream("D:\\stream01.txt");//该构造方法为每次写入的数据都覆盖原来的
FileOutputStream fos = new FileOutputStream("D:\\stream01.txt",true); //为不覆盖
fos.write(97);
fos.write('a');
fos.write('c');
System.out.println("执行完毕");
String str = "helloword";
fos.write(str.getBytes());
}
}
运行结果:
文件内容:
注意:代码的顺序是先读取再写入进去。
字节流复制文件:
package com.java.leetcode.io; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; /*
使用文件字节流实现文件的复制
*/
public class Stream02 {
public static void main(String[] args) throws IOException {
//文件字节输入流
FileInputStream fis = new FileInputStream("E:\\face01.jpg"); //抛出异常,文件可能不存在
//文件字节输出流
FileOutputStream fos = new FileOutputStream("E:\\face001.jpg"); //未复制前并不存在该文件。将face01复制,复制后的图片放在E盘下,明明为face001。jpg
//一边读,一边写
byte[] buffer = new byte[1024]; //每次读1k
int count = 0;
while ((count = fis.read(buffer))!=-1) {
fos.write(buffer);
}
//关闭
fis.close();
fos.close();
System.out.println("复制完毕!");
}
}
IO ——字节流的更多相关文章
- JAVA IO 字节流与字符流
文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节. ...
- Java学习之IO字节流
字节流分为FileInputStream 和FileOutputStream package com.io; import java.io.File; import java.io.FileInput ...
- Java提高篇(二):IO字节流、字符流和处理流
在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写. 一.字节流 下面是一个字节流的实例: import java.io.*; public class I ...
- Java学习笔记28(IO字节流)
IO定义: 写:Output操作:将内存上的数据持久化 到设备上,这个动作称为输出: 读:Input操作:把硬盘上的东西读取到内存,这个动作称为输入: 这两种操作称为IO流 ...
- 14、IO (字节流、字符流)
输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 ...
- IO字节流。
字节输出流: java.io.OutputStream :抽象类,是表示输出字节流的所有类的父类. java.io.FileOutputStream extends OutputStream: 文件字 ...
- Java IO 字节流与字符流 (五)
Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...
- Java IO 字节流与字符流 (三)
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- Java IO 字节流与字符流 (二)
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_3_字节输出流_OutputStream类&FileOutputStream
都在IO包下 所有字节输出最顶层的父类 它是一个抽象类.abstract修饰的 一般这种类定义的都是所有字节流都可以使用公共的方法,
随机推荐
- 一个lseek引起的思考
先看一段代码: int find_value(int fd) { int ret; char buff[8] = ""; struct timeval st,ed; long lo ...
- Markdown初识及基本使用
Markdown初识及基本使用 由Typora编写. 一.初识Markdown 允许人们使用易读易写的纯文本格式编写文档. 是一种轻量级标记语言 编写的文档可以导出 HTML .Word.图像.P ...
- java打入jar包
首先在项目下创建一个文件夹,保存我们的jar包. 在项目名上右击,依次点击[New]-->[Floder],打开新建文件夹窗口 输入文件夹名称[lib],点击[ok].我们通常在lib文件夹中存 ...
- MVC与MVVM?
model-数据层 view-视图层 controller-控制层 MVC的目的是实现M和V的分离,单向通信,必须通过C来承上启下 MVVM中通过VM(vue中的实例化对象)的发布者-订阅者模式实现双 ...
- Kafka 的高可靠性是怎么实现的?
可以参见我这篇文章:Kafka 是如何保证数据可靠性和一致性
- Vue-Router在当前UR不刷新的Debug调试
如果使用vue-router在当前页面刷新,则会中断此操作,没有反应,错误信息是: Error: Avoided redundant navigation to current location: & ...
- Semaphore 有什么作用 ?
Semaphore 就是一个信号量,它的作用是限制某段代码块的并发数.Semaphore 有一个构造函数,可以传入一个 int 型整数 n,表示某段代码最多只有 n 个线程可 以访问,如果超出了 n, ...
- Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
Redisson.Jedis.lettuce 等等,官方推荐使用 Redisson.
- 学习 MongoDB(一)
1.介绍 MongoDB是C++语言编写,是一个基于分布式文件存储的开源数据库系统,MongoDB将数据存储为一个文档, 数据结构由键值对(key=>value)组成,MongoDB文档类似于 ...
- 学习DNS(一)
DNS(Domain Name System,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户方便的访问互联网,而不用去记住能够被机器读取的IP数串.通过主机名,最终得到该主 ...