当前位置: 首页 > ops >正文

Java IO流操作(FileInputStream、ByteArrayInputStream、ObjectInputStream)

一、介绍

        java 的IO流操作主要分为字节流和字符流,每个流都会有输入和输出两种类型的流。所有的字节流类都继承自InputStream 和 OutputStream 这两个抽象类,而所有的字符流类是都继承自Reader 和 Writer 这两个抽象类。字节流的处理单位是字节,通常用来处理二进制文件,如音乐、图片文件等。而字符流的处理单位是字符,通常来处理文本。对流进行操作之后,都要记得关闭它。BufferInputStream和BufferOutputStream是字节缓冲流,BufferReader和BufferWriter是字符缓冲流。缓冲流的读写速度比正常的来的快

二、FileInputStream字节流

1、介绍。

        FileInputStream是Java语言中抽象类InputStream用来具体实现类的创建对象。FileInputStream可以从文件系统中的某个文件中获得输入字节,获取的文件可用性取决于主机环境。FileInputStream的构造方法需要指定文件的来源,通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

2、代码。

private static final String Pre_Path = "G:\\项目测试\\io流文件测试\\";public static void main(String[] args) {fileInputTest(); //文件的复制(字节流)
}//文件的复制(字节流)
private static void fileInputTest() {InputStream inputStream = null;//输入流OutputStream outputStream = null;//输出流try {inputStream = new FileInputStream(Pre_Path + "fileStream\\01.jpg");outputStream = new FileOutputStream(Pre_Path + "fileStream\\02.jpg");//从输入流读取0 到 255数量的字节,并写入输出流中int readByte;while ((readByte = inputStream.read()) != -1) {outputStream.write(readByte);}} catch (Exception e) {e.printStackTrace();} finally {try {if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();}} catch (Exception e) {e.printStackTrace();}}
}

3、测试文件:

4、结果。

三、ByteArrayInputStream字节流

1、介绍。

        字节数组输入流在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。

2、代码。

    private static final String Pre_Path = "G:\\项目测试\\io流文件测试\\";public static void main(String[] args) {byteArrayStreamTest();//将小写字符串转为大写字符串}//将小写字符串转为大写字符串private static void byteArrayStreamTest() {//将字符串转为字节数组String lowerStr = "qwer";System.out.println("小写字符串:" + lowerStr);byte[] lowerByteArray = lowerStr.getBytes();System.out.println("小写字符串的字节数组:" + Arrays.toString(lowerByteArray));//ByteArrayInputStream inputStream = null;//输入流ByteArrayOutputStream outputStream = null;//输出流try {inputStream = new ByteArrayInputStream(lowerByteArray);outputStream = new ByteArrayOutputStream();int readByte;while ((readByte = inputStream.read()) != -1) {int upperChar = Character.toUpperCase((char) readByte);outputStream.write(upperChar);}//将字节数组转为字符串byte[] upperByteArray = outputStream.toByteArray();System.out.println("大写字符串的字节数组:" + Arrays.toString(upperByteArray));String upperStr = new String(upperByteArray);System.out.println("大写字符串:" + upperStr);} catch (Exception e) {e.printStackTrace();} finally {try {if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();}} catch (Exception e) {e.printStackTrace();}}}

3、结果。


四、ObjectInputStream字节流。

1、介绍。

        将对象的原始数据序列化,ObjectOutputStream将序列化的数据反序列化。当分别使用FileInputStream和FileOutStream做为输入和输出流ObjectInputStream和ObjectOutputStream是可以提供持久化的应用程序。ObjectInputStream 用于恢复先前序列化的对象,其它的用途包括主机之间使用socket流传递对象、远程系统调用。

2、代码(对象一定要继承Serializable接口)。

    private static final String Pre_Path = "G:\\项目测试\\io流文件测试\\";public static void main(String[] args) {objectStreamTest();//序列化对象到文件中,并从文件中得到反序列对象}//序列化对象到文件中,并从文件中得到反序列对象private static void objectStreamTest() {//初始化对象User user = new User();user.setUsername("admin");user.setPassword("123456");System.out.println("要序列化到文件中的对象:" + user);//ObjectInputStream inputStream = null;//输入流ObjectOutputStream outputStream = null;//输出流try {//将对象序列化到文件中outputStream = new ObjectOutputStream(new FileOutputStream(Pre_Path + "objectStream\\user.txt"));outputStream.writeObject(user);//从文件中得到反序列化对象inputStream = new ObjectInputStream(new FileInputStream(Pre_Path + "objectStream\\user.txt"));User userFromFile = (User) inputStream.readObject();System.out.println("从文件中反序列化的对象:" + userFromFile);} catch (Exception e) {e.printStackTrace();} finally {try {if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();}} catch (Exception e) {e.printStackTrace();}}}
public class User implements Serializable {private String username;private String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

3、结果。

http://www.xdnf.cn/news/11361.html

相关文章:

  • flash 小游戏大全
  • Android studio ListView应用设计
  • Linux修改文件名的三种方法分享
  • 虚拟局域网技术
  • LT9211 单路LVDS转双路LVDS,成熟方案,提供技术支持
  • jQuery-ui插件datepicker的参数使用详解
  • 请你记住这3款国产软件,免费又实用,它们值得收藏
  • 数据结构--抽象数据类型三元组Triplet的表示和实现
  • 网络安全行业名词_失陷主机(1)
  • DBeaver工具-虚谷数据库各级备份恢复
  • 宝塔 Linux centos Workerman换域名步骤
  • Java基础知识自学指南(一)Java快速入门
  • gentoo基本安装过程
  • 51单片机之逻辑运算指令ANL、ORL、XRL等
  • Android开发基础——ListView
  • 73种网页常用js代码
  • ico图标和制作网站(比特虫)
  • 太阳 仰角和方位角(Elevation and Azimuth)
  • log4net的使用
  • 一文教你认清领域模型和数据模型
  • 关闭Windows自动更新的6种方法
  • jqGrid的常用属性和方法
  • Java报表工具 JasperReports iReport
  • Cool Edit Pro是什么?Cool Edit Pro怎么用?
  • linux container框架,深度解析Containers--系统架构
  • 中间件之搜索和数据分析组件Elasticsearch
  • Struts与Struts2的区别
  • c++getline 读取一行内容
  • 《入门级-Cocos2d 4.0塔防游戏开发》---实战
  • 阮一峰ES6精缩——Promise对象