1、流按照方向分:输入流和输出流。(以内存做为参照物)
当从数据源中,将数据读取到内存中时,叫做输入流也叫读取流。
当将内存中的数据写入到数据源时,叫做输出流也叫写入流。

2、流按照传输的内容分,:字节流、字符流和对象流。
无论是哪一种流底层部分都是以字节方式传输。所以,其本质都是字节流。但是为了方便程序员更好的操作字符数据和对象数据。所以,在字节流基础上做了一层包装形成了字符流和对象流。

字节流:抽象父类是InputStream和OutputStream
字符流:抽象父类是Reader和Writer

3、流操作的步骤:
①建立流
②操作流
③关闭流

操作文件时,如果文件不存在,那么读取流会抛出未找到文件异常,而写入流会创建新文件。

流操作的主要目的:数据的转换。

4、序列化:
当需要对对象进行传输时,由于对象中数据很庞大,无法直接传输。那么在传输之前,需要将对象打散成二进制的序列,以便传输,这个过程称为序列化过程;到达目的地后,又要将二进制序列还原成对象,这个过程称为反序列化过程。

所有需要实现对象序列化的对象必须首先实现Serializable接口。

java.io.NotSerializableException:当需要传输对象时,而该对象所在的类,没有实现序列化接口时抛出。

transient 关键字:属性的修饰符。表示在传输对象时,被transizent修饰的属性值不做传输。

字节流:

/** 读取流 */
public void readData() {
InputStream in = null;
  try {
  // 建立文件读取字节流
  in = new FileInputStream("//读取文件地址");
  int data = 0;

  // read()一次读取一个字节,返回读取的数据,当返回值为-1时,表示文件读取完毕
   while ((data = in.read()) != -1) {
     System.out.println(data);
    }
  byte[] by = new byte[1024];
  int len = 0;
  // 将流中的数据读取到字节数组中,返回当前读取的字节数。读取完毕,返回-1
  while ((len = in.read(by)) != -1) {
  System.out.println(len);
  }

} catch (Exception e) {
e.printStackTrace();
} finally {
  try {
  // 关闭流
  in.close();
} catch (IOException e) {
  e.printStackTrace();
    }
}

/** 写入流 */
public void writeData(String str) {
  OutputStream out = null;
try {
  // true表示追加方式写入数据
  out = new FileOutputStream("//写入地址", true);

  // 将字符串转换成字节数组
  out.write(str.getBytes());
} catch (Exception e) {
  e.printStackTrace();
} finally {
try {
  out.close();
} catch (IOException e) {
  e.printStackTrace();
  }
}

/**复制文件*/
public void copyFile() {
  InputStream in = null;
  OutputStream out = null;
  try {
  in = new FileInputStream("//读取地址");
  out = new FileOutputStream("//写入地址");
  byte[] by = new byte[1024];
  int len = 0;
  while ((len = in.read(by)) != -1) {
  //读取几个字节,就写入几个字节
  out.write(by,0,len);
}
} catch (Exception e) {
  e.printStackTrace();
} finally {
try {
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

字符流:
/**读取*/
public void readData() {
Reader r = null;
BufferedReader br = null;

try {
//建立文件读取流
r = new FileReader("//读取地址");
//套接流,在一个流的基础上,再套接一个流,也称为高级流
br = new BufferedReader(r);
String str = null;
//读取一行数据,以\n或回车作为结束符
while ((str = br.readLine()) != null) {

System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**写入*/
public void writerData(String str){
Writer w =null;
try {
w=new FileWriter("//写入地址", true);
w.write(str);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

转载于:https://www.cnblogs.com/LYL6868/p/8976075.html

自学JAVA-11:IO流相关推荐

  1. Java基础—IO流

    第一讲   IO概述 1. 流的概念 IO流即InputOutput的缩写,在Java中IO流用来处理设备之间的数据传输,Java对数据的操作是通过IO流的方式, 我们可以把IO流抽象的当作一根管道, ...

  2. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

  3. 黑马程序员-JAVA基础-IO流之字符流和字符流缓冲区

    ------- android培训.java培训.期待与您交流!------- Java 的IO 流 是实现输入和输出的基础,Java 中把不同的输入.输出源抽象表述为"流" (S ...

  4. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类

    目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...

  5. 解决关于java的IO流进行文件拷贝时拒绝访问的问题

    解决关于java的IO流进行文件拷贝时拒绝访问的问题 1.在学习java IO流的时候,想进行文件的自动拷贝功能,我的代码是在idea中编写的,编写没有报红,但是运行时却出现了java.io.File ...

  6. Java中IO流,输入输出流概述与总结(转载自别先生文章)

    Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...

  7. Java入门——IO流

    一.File类的使用 1.1 File类的实例化 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但File 不能访问文件内容本身. ...

  8. JAVA基础 IO流技术学习笔记

    目录 一.IO 流技术介绍 1.1  什么是IO? 1.2  流的概念 1.3  数据源 1.3.1 什么是数据源? 1.3.2数据源的分类 二.第一个简单的IO流程序 三.IO流经典写法(适用于任何 ...

  9. java数据通道抽象为流_【java】IO流

    对于java的IO流的理解很长时间来都是很乱,包括学习其他的语言对这一块知识也都算是一个盲点.更多的时候一提到读取保存数据就是使用数据库.这一次学习了IO流,自己又解决了一个很大的盲点. IO流为我们 ...

  10. 第15章-输入/输出 --- 理解Java的IO流

    (一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...

最新文章

  1. CodeForces 595A
  2. ViewPager+Fragment实现TabHost(可复用的类)
  3. centos7.3安装nodejs
  4. java中哲学家就餐死锁_哲学家就餐问题与死锁总结
  5. Java高级语法笔记-语法支持的异常
  6. CentOS各个版本镜像下载地址
  7. java基础知识整理(精简)
  8. JAVA-数据类型、变量、常量
  9. 账龄分析表excel模板_经理都头疼的财务分析表!新手会计用10套模板半时搞定,厉害...
  10. Three.js学习笔记①---搭建本地three.js官网(来自B站老陈视频)
  11. uva 11137 Ingenuous Cubrency
  12. 艾伦·凯与Smalltalk语言
  13. 石化行业工作调度,如何选择合适的防爆对讲机?
  14. LeetCode题目:1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
  15. Axure RP 新闻标题链接制作
  16. Towards Spatio-Temporal Aware Traffic Time Series Forecasting
  17. 深度强化学习+启发人类的决策智能,专访一家有愿景的中国企业「启元世界」... 1
  18. 最长情的告白就是陪伴【Python七夕祝福】——那些浪漫的开始
  19. 【机器视觉基础知识整理】
  20. 工银亚洲汇款手续费记录(x5)

热门文章

  1. inDesign教程,如何创建和编辑页面?
  2. 如何在 FaceTime 通话中共享您的屏幕?
  3. 如何在 Mac 上下载 macOS Monterey public beta 6?
  4. 如何在 iPhone、iPad、Mac 和 PC 上设置 iCloud 照片共享?
  5. CleanMyMac v4.10.1支持Monterey 12.x
  6. Mac的「预览」程序如何旋转图片
  7. 苹果Mac开启root用户及切换到root用户的方法
  8. 找出数列中个数大于总数一半的元素(编程之美2.3)
  9. 网络黑客节庆狂欢 趋势科技见招拆招
  10. Check Point截获JavaScript文件隐形攻击