Java流——字节流
字节流的使用
文件字节输入流:每次读取一个字节
- 文件字节输入流:FileInputStream
- 作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。
构造器 | 说明 |
---|---|
public FileInputStream(File file)
|
创建字节输入流管道与源文件对象接通 |
public FileInputStream(String pathname)
|
创建字节输入流管道与源文件路径接通 |
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果返回-1,表示读取到了输入流的末尾 |
public int read(byte[] b) | 将数据读入一个字节数组,如果返回-1,表示读取到了输入流的末尾 |
public int read(byte[] b,int off,int len) | 将数据读入一个字节数组,off 指定在数组b 中存放数据的起始偏移位置,len 指定读取的最大字节数。如果返回-1,表示读取到了输入流的末尾。 |
- 每次读取一个字节存在什么问题?
- 性能较慢
- 读取中文字符输出无法避免乱码问题。
文件字节输入流:每次读取一个字节数组
- 作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果返回-1,表示读取到了输入流的末尾 |
public int read(byte[] b) | 将数据读入一个字节数组,如果返回-1,表示读取到了输入流的末尾 |
public int read(byte[] b,int off,int len) | 将数据读入一个字节数组,off 指定在数组b 中存放数据的起始偏移位置,len 指定读取的最大字节数。如果返回-1,表示读取到了输入流的末尾。 |
- 每次读取一个字节数组存在什么问题?
- 读取的性能得到了提升
- 读取中文字符输出无法避免乱码问题。
文件字节输入流:一次读完全部字节
如何使用字节输入流读取中文内容输出不乱码呢?
- 定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。
直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?
- 如果文件过大,字节数组可能引起内存溢出。
官方为字节输入流InputStream提供了如下API可以直接把文件的全部数据读取到一个字节数组中
public byte[] readAllBytes() throws IOException:直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回
文件字节输出流:写字节数据到文件
- 作用:以内存为基准,把内存中的数据以字节的形式写出到磁盘文件中去的流。
构造器 | 说明 |
---|---|
public FileOutputStream(File file) | 创建字节输出流管道与源文件对象接通 |
public FileOutputStream(File file,boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath) | 创建字节输出流管道与源文件路径接通 |
public FileOutputStream(String filepath,boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
- 文件字节输出流(FileOutputStream)写数据出去的API
方法名称 | 说明 |
---|---|
public void write(int a) | 写一个字节出去 |
public void write(byte[] buffer) | 写一个字节数组出去 |
public void write(byte[] buffer , int pos , int len) | 写一个字节数组的一部分出去。 |
- 流的关闭与刷新
方法 | 说明 |
---|---|
flush() | 刷新流,还可以继续写数据 |
close() | 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |
字节输出流如何实现写出去的数据能换行
os.write(“\r\n”.getBytes())
如何让写出去的数据能成功生效?
- flush()刷新数据
- close()方法是关闭流,关闭包含刷新,关闭后流不可以继续使用了。
文件拷贝
import java.io.*;
//复制文件
public class FileCopy { public static void main(String[] args) { InputStream input = null; OutputStream out = null; try { input = new FileInputStream("F:\\java练习\\LOL\\英雄联盟\\hero\\金克丝.txt"); out = new FileOutputStream("F:\\java练习\\LOL\\英雄联盟\\gold\\test.txt"); int len; byte[] bytes = new byte[1024]; while ((len=input.read(bytes))>0) { out.write(bytes,0,len); //Thread.sleep(3000);//没循环一次停止3s } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //先开的后关闭 try { if (out!=null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (input!=null) { input.close(); } } catch (IOException e) { e.printStackTrace(); } } }
}
import java.io.*;
//复制图片
public class PicCopy { public static void main(String[] args) { InputStream input = null; OutputStream out = null; try { input = new FileInputStream("D:\\picture\\恶灵.jpg"); out = new FileOutputStream("F:\\java练习\\LOL\\英雄联盟\\gold\\el.jpg"); byte[] b = new byte[1024]; int len; while ((len = input.read(b))>0) { out.write(b,0,len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { if (out!=null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (input!=null) { input.close(); } } catch (IOException e) { e.printStackTrace(); } } }
}
- 上述代码中,使用try catch是因为在IO流中,使用完后必须手动的回收,即关闭流,具体的原因可以查看该博客:IO流为什么必须手动关闭,不能像其他的方法坐等GC处理。
Java流——字节流相关推荐
- java.IO字节流和字符流详解
IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...
- java 文件字节流_Java:文件字符流和字节流的输入和输出
最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向: 输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...
- java word流_(word)java中字节流示例.doc
(word)java中字节流示例 OutputStream和InputStream分别为java中IO包整个字节输入/输出流的的主类: public abstract class InputStrea ...
- Java中字节流和字符流的比较(转)
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流...
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) •p ...
- java中字节流的分类都有哪些_Java------字节流和字符流(I)
字节流:读写字节文件,通常使用字节流,如:二进制文件,.jpg,.mp3,.avi,.exe,.com,.dll windows平台的执行文件:.exe,.com,.dll 字符流:读写字符文件,通常 ...
- java字符流字节流场景_【120期】Java IO:字节流、字符流、缓冲流
IO流是Java中的一个重要构成部分,也是我们经常打交道的.这篇关于Java IO的博文干货满满,堪称全网前三(请轻喷!) 下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握 ...
- java 序列化 byte_java里字符流 字节流和序列化的区别?
展开全部 Java 流在处理上分为字符e69da5e6ba903231313335323631343130323136353331333337396234流和字节流.字符流处理的单元为 2 个字节的 ...
- java io 字节流 字符流
1.流的概念 在程序中,所有的数据都是以流的形式进行传输和保存的,当程序需要数据的时候要使用输入流读取数据,而当程序需要保存数据时要使用输出流写数据 2.字节流和字符流 字节流:处理单元为1个字节,操 ...
最新文章
- numpy.logspace()产生一个数组
- 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3
- HDU(1856),裸的带权并查集
- 使用镀锌铁皮制作负阻器件
- Select()系统调用及文件描述符集fd_set的应用
- 每日一皮:实习生将他的代码交给高级开发人员,高级开发反手一个...
- python小项目实例流程-推荐三个最适合零基础小白练手的python项目,分享给你!...
- CentOS配置SSH单向无密码访问
- 详细分析JVM内存模型
- cent 8.0 安装tomcat 9.0_Tomcat部署及优化
- c语言判断x的个位数是否为5,用C语言编程从键盘输入一个正整数,判断其个位数是否为5,若是5则输出“yes”,否则输出“no”...
- mysql 1千万 like优化_MYSQL千万级数据量的优化方法积累
- DeepFaceLab报错,CUDA driver is insufficient 解决方法!
- struts2的struts.properties配置文件详解 (转)
- 标定_基于全景基础设施的多摄像机和3D激光雷达校准
- 阶段3 1.Mybatis_11.Mybatis的缓存_5 缓存的概念
- MySQL 之 query cache
- MapServer教程
- 13位时间戳单位为毫秒,10位字符串单位为秒。时间戳转换日期数字格式100%全乎
- Win XP系统无法关机时如何强制软关机