包装类DataOutputStream、DataInputStream的常见用法
来源:互联网 发布:java 面试常见问题 编辑:程序博客网 时间:2024/06/03 14:55
转载:http://blog.sina.com.cn/s/blog_86d222340100ta01.html
包装类DataOutputStream、DataInputStream为我们提供了多种对文件的写入和读取方法,如writeBoolean(),writeUTF(),writeCharwriteByte(),writeDouble()等和对应的read方法,这些方法极大的方便了我们的写入和读取操作,下面结合一个程序来探讨一下这些方法的使用。
import java.io.*;public class TestDataStream { public static void main(String[] args) throws Exception { FileOutputStream fos=new FileOutputStream("data.txt"); BufferedOutputStream bos=new BufferedOutputStream(fos); DataOutputStream dos=new DataOutputStream(bos); FileInputStream fis=new FileInputStream("data.txt"); BufferedInputStream bis=new BufferedInputStream(fis); DataInputStream dis=new DataInputStream(bis); String str="你好hi"; dos.writeUTF(str); //按UTF-8格式写入 dos.writeChars(str); //按字符写入 //按字节写入有两种方法,第一种方法只能适应无汉字的情况; //因为方法1在写入时会把所有的字符都按1个字节写入,而汉字的表示需要2个字节, //这就造成了数据的丢失,读入时就会出现乱码。 //而方法2在将字符串转换为字节数组时就把汉字字符变为了2个字节, //写入文件的时候也会按2个字节的文字写入,这样读取的时候就不会出现问题 dos.writeBytes(str);//方法1:将整个字符串按字节写入 byte[] b=str.getBytes(); dos.write(b); //方法2:将字符串转换为字节数组后再逐一写入 dos.close(); //按UTF-8格式读取 System.out.println(dis.readUTF()); //字符读取 char [] c=new char[4]; for(int i=0;i<4;i++){ c[i]=dis.readChar(); //读取4个字符 } System.out.print(new String(c,0,4)); System.out.println(); //字节读取 byte [] b1=new byte[4]; dis.read(b1); //读取4个字节 System.out.print(new String(b1,0,4));//输出时会出现乱码 System.out.println(); byte [] b2=new byte[1024]; int len=dis.read(b2); //按字节读取剩余的内容 System.out.println(new String(b2,0,len)); }}输出结果为:你好hi你好hi`}hi你好hi
注意1:一般情况下在读入时尽量按照写入时的格式进行读取,
否则有可能会出现显示乱码或程序出现异常。
如首先写入文件用的是writeUTF(),在读取的时候如果不是用readUTF()就会出现乱码,
如果readUTF()读取的内容不是UTF-8格式的,程序就会抛出异常。
注意2:如程序中注释所说,对于出现汉字字符的情况不能用writeBytes(),这会在写入文件时丢弃汉字字符的第一个字节从而在读取时出现错误。
注意3:所有的读取方法都是共享一个位置指示器的,即在前面的read方法执行后,后面再执行其他read方法都是从上一个read方法读取到的位置开始向后读取的。如开始执行了1次readByte()后面的readChar是从第2个字节开始读的。
阅读全文
0 0
- 包装类DataOutputStream、DataInputStream的常见用法
- 包装类DataOutputStream、DataInputStream的常见用法
- 包装类DataOutputStream、DataInputStream的常见用法
- 包装类DataOutputStream、DataInputStream的常见用法
- 包装类DataOutputStream、DataInputStream的常见用法
- 包装类DataOutputStream、DataInputStream的常见用法
- 对包装类DataInputStream/DataOutputStream的应用
- DataInputStream与DataOutputStream的用法
- java--包装类(DataInputStream,DataOutputStream )
- DataInputStream与DataOutputStream用法
- DataInputStream和DataOutputStream类
- DataInputStream与DataOutputStream类
- DataInputStream和DataOutputStream类
- DataInputStream和DataOutputStream类
- ByteArrayOutputStream、ByteArrayInputStream、DataOutputStream、DataInputStream用法
- “黑马程序员”IO流DataInputStream与DataOutputStream的用法
- DataInputStream和DataOutputStream用法细节探讨
- DataInputStream和DataOutputStream用法细节探讨
- python3与MySQL交互
- Android 腾讯Bugly——异常上报和应用更新
- c中动态开辟内存的几个函数
- 7XML XQuery——语法
- 使用 Spark MLlib 做 K-means 聚类分析
- 包装类DataOutputStream、DataInputStream的常见用法
- idea 从数据库快速生成Spring Data JPA实体类
- new、delete和malloc、free
- Eclipse安装SVN插件
- 代理模式
- 定义一个Language类
- Light Probe Proxy Volume component
- TCP编程
- Go语言操作mysql实现增删改查