A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王永荣 中级黑马   /  2012-11-17 09:52  /  2431 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王永荣 于 2012-11-17 16:04 编辑

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

============
解决方法。。。得知道写入的字符串大小,然后一个一个的读取。{:soso_e125:}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览

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();

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
DataOutputStream类提供了三个写入字符串的方法:
writeBytes(String s);writeChars(String s);writeUTF(String str)

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

示例代码:

  • import java.io.*;  
  • public class Iotest {  
  •   
  •     /**
  •      * @param args
  •      */  
  •     public static void main(String[] args) {  
  •         // TODO Auto-generated method stub  
  •         try {  
  •             FileOutputStream fos = new FileOutputStream("a.txt");  
  •             BufferedOutputStream bos = new BufferedOutputStream(fos);  
  •             DataOutputStream dos = new DataOutputStream(bos);  
  •             dos.writeUTF("hello io!");  
  •             dos.close();  
  •               
  •             FileInputStream fis = new FileInputStream("a.txt");  
  •             BufferedInputStream bis = new BufferedInputStream(fis);  
  •             DataInputStream dis = new DataInputStream(bis);  
  •             System.out.println(dis.readUTF());  
  •               
  •         } catch (FileNotFoundException e) {  
  •             // TODO Auto-generated catch block  
  •             e.printStackTrace();  
  •         } catch (IOException e) {  
  •             // TODO Auto-generated catch block  
  •             e.printStackTrace();  
  •         }  
  •          
  •     }  
  •   
  • }

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马