DataInputStream与DataOutputStream类

·   DataOutputStream类提供三个写入字符串的方法:
   --  public final void writeBytes(String s)  //由于JAVA的字符编码是Unicode的,第个字符占两个字节,writeBytes方法只是将每个字符的低字节写入到目标设备中
   --  public final void writeChars(String s) //writeChars是将字符的两个字节都写入到目标设备中
   --  public final void writeUTF(String str) //writeUTF将字符串按照UTF编码写入到目标设备(其中包括长度)

·   为什么DataInputStream类中有一个readUTF方法,而没有"readBytes"和"readChars"方法呢?

·   编程实例:分别使用DataOutputStream类的writeUTF,writeBytes和writeChars方法,比较这几个方法的差异。程序中所使用的流栈如下:

·   关闭流栈中的最上层的流对象(DataInputStream,DataOutputStream),将会自动关闭流栈中的所有底层流对象。

//DataStreamTest.java

import java.io.*;
public class DataStreamTest{
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("count.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
dos.writeUTF("ab中国");
dos.writeBytes("ab中国");
dos.writeChars("ab中国");
dos.close();//只要关闭最上层流对象,下层的流对象也会关闭
FileInputStream fis = new FileInputStream("count.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
System.out.pritnln(dos.readUTF());
dis.close();
}
}

PrintStream类

·   PrintStream类提供了一系列的print和println方法,可以将基本数据类型的数据格式化成字符串输出。

·   格式化输出是什么意思?例如:97被格式化输出的实际字节数据为0X39和0X37。

·   PrintStream的3个构造函数:
    --  PrintStream(OutputStream out)
    --  PrintStream(OutputStream out,boolean autoflush)
    --  PrintStream(OutputStream out,boolean autoflush,String encoding)

·   与PrintStream对应的PrintWriter类,即使遇到了文本换行标识符(\n),PrintWriter类也不会自动清空缓冲区。

·   PrintWriter的println方法能根据操作系统的不同而生成相应的文本换行标识符。在Windows下的文本换行符是“\r\n“,而Linux下的文本换行标识符是“\n“。

ObjectInputStream与ObjectOutputStream类

·   ObjectInputStream和ObjectOutputStream这两个包装类,用于从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流。

·   ObjectInputStream与ObjectOutputStream类所读写的对象必须实现了Seralizable接口。对象中的transient和static类型的成员变量不会被读取和写入。

·   一个可以被序列化的MyClass类的定义:

   public class MyClass implements Serializable{
public transient Thread t;
private String customerID;
private int total;
}

编程举例:创建了一个可序列化学生对象,并用ObjectOutputStream类把它存储到一个文件(mytext.txt)中,然后再用ObjectInputStream类把存储的数据读了到一个学生对象中,即恢复保存的学生对象。

//Student.java

import java.io.Serializable;
class Student implements Serializable{
int id;
String name;
int age;
String department;
public Student(int id,String name,int age,String department){
this.id = id;
this.name = name;
this.age = age;
this.department = department;
}
}

//Serialization.java 启动类

import java.io.*;
public class Serialization{
public static void main(String[] args) throws Exception {
Student stu1 = new Student(19,"zhangsan",25,"hauxue");
Student stu2 = new Student(20,"lisi",23,"wuli");
FileOutputStream fos = new FileOutputStream("student.txt");
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(stu1);
os.writeObject(stu2);
os.close();
FileInputStream fis = new FileInputStream("student.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
stu1 = (Student)ois.readObject();
stu2 = (Student)ois.readObject();
ois.close();
System.out.println("id:" + stu1.id);
System.out.println("name:" + stu1.name);
System.out.println("age:" + stu1.age);
System.out.println("age:" + stu1.department);
System.out.println("id:" + stu2.id);
System.out.println("name:" + stu2.name);
System.out.println("age:" + stu2.age);
System.out.println("age:" + stu2.department);
}
}

字节流与字符流的转换

·   能不能找到一种简单的方式来读取键盘上输入的一行字符,如何找?

·   InputStreamReader和OutputStreamWriter,是用于将字节流转换成字节流来读写的两个类,InputStreamWriter可以将一个字节流中的字节解码成字符后读取,OutputStreamWriter将字符编码成字节后写入到一个字节流中。

·   InputStreamReader的两个主要的构造函数:
   --  InputStreamReader(InputStream in)
   --  InputStreamReader(InputStream in,String CharsetName)

·   OutputStreamWriter的两个主要的构造函数:
   --  OutputStreamWriter(OutputStream out)
   --  OutputStreamWriter(OutputStream out,String CharsetName)

避免频繁地在字符与字节间进行转换,最好不要直接使用 InputStreamReader 和 OutputStreamWriter 类来读写数据,应尽量使用 BufferedWriter 类包装 OutputStreamWriter 类,用 BufferedReader 类包装 InputStreamReader 。

DataInputStream与DataOutputStream类相关推荐

  1. DataOutputStream 类 和DatainputStream类 的主要方法简单介绍,及代码演示。

    DataOutputStream数据输出流 将java基本数据类型写入数据输出流中.并可以通过数据输入流DataInputStream将数据读入. DataOutputStream类 构造函数: Da ...

  2. java dataoutputstream_Java DataOutputStream类

    DataOutputStream类用于将原始数据类型写入输出源.以下是创建DataOutputStream的构造函数. DataOutputStream out = DataOutputStream( ...

  3. Java的IO操作(二) - 带缓冲区的流对象、写入基本数据类型、实现命令行中的copy命令...

    在上一节中,我们使用FileInputStream类和FileOutputStream类来实现了一个可以自由拷贝文件的功能.为了提高效率,我们人为地定义一个缓冲区byte[] 数组.其实,我们可以使用 ...

  4. java中什么方法用来清空流_这个真的写的很细,JavaIO中的常用处理流,看完只有10%的人还不懂了...

    JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...

  5. 2018-2019-2 《Java程序设计》第6周学习总结

    20175319 2018-2019-2 <Java程序设计>第6周学习总结 教材学习内容总结 本周学习<Java程序设计>第七章和第十章: 内部类: 1.内部类可以使用外嵌类 ...

  6. c 解析java byte,深入解析Java编程中面向字节流的一些应用

    文件输入输出流 文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作. [例]通过程序创建一个文件,从键盘输入字符,当遇到字符 ...

  7. 总结JAVA----IO流中的字节流

    对于IO流中字节流的总结 字节流的概念 由于应用程序,经常需要和文件打交道,所以Inputstream专门提供了读写文件的子类:FileInputStream和FileOutputStream类,如果 ...

  8. (1 24) 3 java代码_《Java语言程序设计》测试题及参考答案(第1部分)

    一.单项选择题 1.Java Applet编程时用户的Applet程序类的正确定义是哪一种 ? (1)class MyApplet extends applet{ } (2)class MyApple ...

  9. 史上最全的Java学习路线

    java基础 一.Java的历史和三大版本 1. Java的发展史 2. Java语言能做什么 二.Java的开发环境 1. 配置开发环境 三.Java的第一个程序及运行原理 JVM 的组成部分 写第 ...

最新文章

  1. 【linux】用过的shell命令
  2. 一个缓存穿透引发的血案
  3. 一举打败16个同类模型,视频超分比赛冠军算法入选CVPR 2022,来自商汤南洋理工大学...
  4. 【增强】FI行项目报表增强任意字段
  5. SQL存在一个表而不在还有一个表中的数据
  6. python记录日志_5分钟内解释日志记录—使用Python演练
  7. linux hlist,linux内核V2.6.11学习笔记(2)--list和hlist
  8. 鲲鹏支持java_#化鲲为鹏,我有话说# 鲲鹏弹性云服务器配置 JAVA 环境
  9. vs2015好看的字体_在VisualStudio中应该使用什么字体
  10. 重新审视自己,把握真实瞬间 _大前研一
  11. uniapp ios 跳转appstore
  12. 第四周-C语言 圆柱体表面积计算
  13. 已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值
  14. Apache Kafka 在 360 的深度实践
  15. pyDicom基本使用操作dicom文件
  16. JAVA简易贪吃蛇游戏实现
  17. tomcat启动子容器启动失败tomcat org.apache.catalina.LifecycleException异常的解决办法
  18. Pulmonary nodule detection in CT scans with equivariant CNNs
  19. 苹果公司的创始人_如果拥有苹果公司10%的股份,能成为世界首富吗?
  20. 内网穿透 NPS工具实现内网穿透

热门文章

  1. 堡垒之夜一年内增1亿玩家、YouTube为支持AV1的8K电视提供8K内容、Elon Musk要过极简生活等...
  2. Nginx入门之两种handler函数的挂载方式
  3. Electron如何调用NodeJS扩展模块
  4. Android MVP
  5. goland设置Terminal
  6. java基础---流程控制
  7. leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal | 106. 从中序后序遍历序列构造二叉树(Java)
  8. leetcode 386. Lexicographical Numbers | 386. 字典序排数(Java)
  9. Redis实战(七):redis的集群:主从复制、CAP、PAXOS、cluster分片集群 2
  10. 小师妹学JVM之:GC的垃圾回收算法