Java中三种文件流写入字符串的方法

原创 2017年01月03日 20:04:48

     一.DataOutputStream类提供了如下3种写入字符串的方法:

   1.writeByte(String s);

   2.writeChars(String s);

   3.writeUTF(String s);


   二.三种方法的稳定性

   其中,前两种方法主要用于操作基本数据类型字节(Byte)和字符(Char)的写入,而第三种主要用于操作字符串(String)的读取。由于Java中的字符是Unicode编码的,是双字节的。

   writeBytes只会将字符串中的每一字符的低字节内容写入目标设备中,所以会存在丢失数据的可能性。如果你写的是"a"这个String,当它取出'a'这个字符后,强转为Byte,由于字符'a'完全可以用一个字节表示,所以没有丢失数据。但如果你写的是这个String包含中文,比如"你"(由于中文是用两个字节编码的),当它取出'你'这个字符后,强转为byte,由于字符'你'必须用2个字节才能表示,所以丢失数据。

   writeChars方法也是依次取出每一个字符,分别写入底层的流中。因为每个字符占2个字节,所以对于每一个字符,也必须连续写入2个字节才能完整的表示。使用writeChars写入String不会造成数据的丢失,但是如果想取出写入的String,则必须要知道原String的长度,通过控制连续读取的字节数来读取。

   writeUTF将字符申按照UTF编码后的字节长度写入目标设备,然后才是每一个字节的UTF编码,不存在丢失数据的风险,而且只有writeUTF方法向目标设备中写入字符串的长度,所以也能准确地读回写入字符申。


   三.使用例子

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test {
	public static void main(String[] args) {
		try {
		       FileOutputStream fs=new FileOutputStream("D:/test.txt");
		       DataOutputStream ds=new DataOutputStream(fs);
			
                       //writeUTF可以直接写入数据,不会丢失数据
                       ds.writeUTF("使用writeUTF()方法写入数据;");

                       //writeChars首先要写入String的长度,不会丢失数据
                       String s=new String("使用writeChars()方法写入数据;");
                       ds.writeInt(s.length());ds.writeChars(s);

                       //writeChars首先要写入String的长度,会丢失数据
                       String s1=new String("使用writeBytes()方法写入数据;");
                       ds.writeInt(s1.length());
                       ds.writeBytes(s1);ds.close();

                       FileInputStream fis=new FileInputStream("D:/test.txt");
                       DataInputStream dis=new DataInputStream(fis);
                       System.out.println(dis.readUTF());//从流中直接读取writeUTF写入的数据

                       int len=dis.readInt();//先从流中读取wirteChars写入的数据长度,才能知道要完整读取数据
                       for(int i=0;i<len;++i)
                             System.out.println(dis.readChar());

                       int len1=dis.readInt();//先从流中读取wirteBytes写入的数据长度,才能知道要完整读取数据,数据失真
                       for(int i=0;i<len1;++i) 
                            System.out.print(dis.readByte()+" ");
                       }catch (Exception e){
                            e.printStackTrace();
                       }
           }
}

















                

字符流读取一个文件的内容

一个文件中存储着很多数,用“,”分割,求这些数的平均数? 读取文件将文本连接成一个字符串,然后以“,”分割成字符串数组,然后求和,求平均数 import java.io.BufferedReader;...
  • qq_24238389
  • qq_24238389
  • 2015年10月15日 10:56
  • 744

JAVA中几种读取文件为字符串

方式一 Java code ? 1 2 3 4 5 6 7 8 9 10 11 12...
  • stormbjm
  • stormbjm
  • 2014年02月20日 11:26
  • 45008

字符流的三种输入输出方法

字符流三种比较常用的输入输出方法,另外还有两种单个字符的输入输出,用缓冲流包装的单个字符的输入输出, 这不多写了,. 方法如下: package com.java2017_04_07; i...
  • Shiqingning
  • Shiqingning
  • 2017年04月10日 17:35
  • 686

java读取文件-字符流读取方式

java采用16位的Unicode来表示字符串和字符,对应的数据流就称为字符流。Reader和Writer为字符流设计。FileReader是InputStreamReader的子类,而InputSt...
  • ZSMJ_2011
  • ZSMJ_2011
  • 2012年09月14日 17:02
  • 35181

Java字符串写入文件三种方式

1、使用FileWriterString str="hello world!"; FileWriter writer; try { writer...
  • fuyuwei2015
  • fuyuwei2015
  • 2015年03月14日 10:52
  • 11858

Java将字符串写入文件与将文件内容读取到字符串

将字符串写入文件 方法一 public void WriteStringToFile(String filePath) { try { File file ...
  • liuweiyuxiang
  • liuweiyuxiang
  • 2017年04月06日 22:32
  • 10835

InputStream、OutputStream、String的相互转换

1、String > InputStream //字符串转inputStream InputStream is =new ByteArrayInputStream(ins.getBytes())...
  • lhi705
  • lhi705
  • 2012年03月26日 21:13
  • 18406

Java 8 流式处理提高程序响应

文章介绍了Java 8 中的流式处理,通过几个例子理解什么时候该用流式处理,而什么时候不该用流式处理。...
  • timchen525
  • timchen525
  • 2017年07月12日 21:28
  • 508

DataOutputStream 的 writeBytes(String s) 方法在向输出流写入中文字

java 的DataOutputStream 的 writeBytes(String s) 方法在向输出流写入中文字符时会出现问题。该方法的源代码如下:      public final ...
  • wanggsx20080817
  • wanggsx20080817
  • 2014年02月13日 16:59
  • 2227

运用InputStream和OutputStream写个简单的拷贝文件

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja...
  • shasiqq
  • shasiqq
  • 2015年04月02日 17:32
  • 5643
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中三种文件流写入字符串的方法
举报原因:
原因补充:

(最多只允许输入30个字)