博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自学JAVA-11:IO流
阅读量:4690 次
发布时间:2019-06-09

本文共 2657 字,大约阅读时间需要 8 分钟。

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

你可能感兴趣的文章
python——网络编程
查看>>
Spark的39个机器学习库
查看>>
Electron学习笔记(一)
查看>>
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
查看>>
配置NRPE的通讯
查看>>
VS2005编译VTK5.10.1
查看>>
shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
查看>>
总结上海永辉云商高级前端职位面试题集
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
Java 文件下载
查看>>
图论——读书笔记 (深度优先搜索)
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>