黑马程序员技术交流社区

标题: DataInputStream和DataOutputStream的疑问 [打印本页]

作者: 王永荣    时间: 2012-11-17 09:52
标题: DataInputStream和DataOutputStream的疑问
本帖最后由 王永荣 于 2012-11-17 16:04 编辑

DataOutputStream 中有方法writeBytes(String s) 和writeChars(String s)可以将一个字符串写入到数据文件中。
那么对应的DataInputStream却没有readBytes()和readChars()方法来读这个数据,
请问这个写入的字符串要怎么读出来?{:soso_e134:}

============
解决方法。。。得知道写入的字符串大小,然后一个一个的读取。{:soso_e125:}
作者: 凊係柈泩    时间: 2012-11-17 10:45
标题: RE: DataInputStream和DataOutputStream的疑问
//定义换行符
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
//创建一个数据输出流输出到本地文件
DataOutputStream dos = new DataOutputStream(new FileOutputStream("d:\\dos.java"));
//创建3个输出流对象
                dos.writeBytes("abc"+LINE_SEPARATOR);
                dos.writeBytes("bcd"+LINE_SEPARATOR);
                dos.writeBytes("ecd"+LINE_SEPARATOR);
//关流
                dos.close();
//数据输出流对应的是数据读入流,用这个读取数据
DataInputStream dis = new DataInputStream(new FileInputStream("d:\\dos.java"));
//DataInputStream中有read(byte[] b)方法来读取字节数据,数据格式是数组,返回值是int型,可以用这个方法读取刚写入的字符串,我定义了一个数组,如果读取数组中的数据不是-1,那么我就在控制台打印对应的字符串
                     byte[] buf = new byte[1024];
                int len = 0;
                while((len = dis.read(buf))!=-1){
                        System.out.println(new String(buf,0,len));
                }
                                //关流
                dis.close();
作者: 曾观富    时间: 2012-11-17 10:55
DataOutputStream类提供了三个写入字符串的方法:
writeBytes(String s);writeChars(String s);writeUTF(String str)

DataInputStream类有一个readUTF方法,而没有“readBytes”和"readChars"方法。这是因为:要在一个连续的字节流中读取字符串,如果没有一个特殊的标记作为字符串的结尾,而且事先也不知道这个字符串的长度,就无法知道该读取到什么样的位置才是这个字符串的结尾。writeUTF方法在写入字符串时就写好了字符串的长度,而writeBytes和writeChars则没有。

示例代码:






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2