黑马程序员技术交流社区
标题:
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则没有。
示例代码:
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();
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2