设为首页 加入收藏

TOP

Java IO流 - 字节流的使用详细介绍(二)
2023-07-23 13:28:37 】 浏览:45
Tags:Java
.out.println(inp.read()); // -1

}

"""


1、String第二个参数可以指定开始位置, 第三个参数可以指定结束位置, 可以用这两个参数解决第三次读取的弊端

2、并且循环改进优化代码



"""

public static void main(String[] args) throws Exception {
InputStream inp = new FileInputStream("/Users/chenyq/Documents/learn_Java/code/file-io-app/src/test.txt");

byte[] arr = new byte[3];
int len;
while ((len = inp.read(arr)) != -1) {
    String res = new String(arr, 0, len);
    System.out.print(res); // abcd123
}

}

"""


每次读取一个数组存在的弊端:

1、读取的性能得到了提升

2、读取中文字符输出无法避免乱码问题。


一次读取全部字节

为解决中文乱码问题我们可以定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。

弊端: 如果文件过大,字节数组可能引起内存溢出。


解决方案一:

自己定义一个字节数组与文件的大小一样大,然后使用读取字节数组的方法,一次性读取完成。


"""

public static void main(String[] args) throws Exception {
File file = new File("/Users/chenyq/Documents/learn_Java/code/file-io-app/src/test.txt");
InputStream inp = new FileInputStream(file);

// 创建一个与文件大小一样的字节数组
byte[] arr = new byte[(int) file.length()];

// 读取文件, 获取读取的字节长度
int len = inp.read(arr);
System.out.println(len); // 252

// 对字节数组进行解码
String res = new String(arr);
System.out.println(res);
// abcd123我爱Java学习Java.abcd123我爱Java学习Java.abcd123我爱Java学习Java.
// abcd123我爱Java学习Java.abcd123我爱Java学习Java.abcd123我爱Java学习Java.
// abcd123我爱Java学习Java.abcd123我爱Java学习Java.abcd123我爱Java学习Java.

}

"""


方式二:

官方为字节输入流InputStream提供了如下API可以直接把文件的全部数据读取到一个字节数组中



方法名称 说明
readAllBytes() 直接读取当前字节输入流对应的文件对象的全部字节数据, 然后装到一个字节数组返回


"""

public static void main(String[] args) throws Exception {
InputStream inp = new FileInputStream("/Users/chenyq/Documents/learn_Java/code/file-io-app/src/test.txt");

// 获取文件的全部字节, 并返回一个字节数组
byte[] arr = inp.readAllBytes();
// 对字节数组进行解码
String res = new String(arr);
System.out.println(res);
// abcd123我爱Java学习Java.abcd123我爱Java学习Java.abcd123我爱Java学习Java.
// abcd123我爱Java学习Java.abcd123我爱Java学习Java.abcd123我爱Java学习Java.
// abcd123我爱Java学习Java.abcd123我爱Java学习Java.abcd123我爱Java学习Java.

}

"""


文件字节输出流

创建字节输出流
文件字节输出流: 实现类FileOutputStream

作用:以内存为基准,把内存中的数据以字节的形式写出到磁盘文件中去的流。



构造器如下:

构造器 说明
FileOutputStream(File file) 创建字节输出流管道与源文件对象接通
FileOutputStream(String filepath) 创建字节输出流管道与源文件路径接通

"""

public static void main(String[] args) throws Exception {
// 写法一: 创建输出流与源文件对象接通
OutputStream oup = new FileOutputStream(new File("/Users/chenyq/Documents/learn_Java/code/file-io-app/src/test.txt"));

}

"""



"""

public static void main(String[] args) throws Exception {
// 写法二: 创建输出与源文件路径接通(常用)
OutputStream oup = new FileOutputStream("/Users/chenyq/Documents/learn_Java/code/file-io-app/src/test.txt");

}

"""


写入文件输出流
文件字节输出流写数据出去的API:

方法名称 说明
write(int a) 写一个字节出去
write(byte[] buffer) 写一个字节数组出去
write(byte[] buffer , int pos , int len) 写一个字节数组的一部分出去

流的刷新与关闭API:

方法 说明
flush() 刷新流,还可以继续写数据
close() 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

注意: 写入数据必须刷新数据, 流使用完成后需要关闭


写一个字节出去



"""

public static void main(String[] args) throws Exception {
OutputStream oup = new FileOutputStream("/Users/chenyq/Documents/learn_Java/code/file
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java扩展Nginx之四:远程调试 下一篇Java入门13(socket)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目