DataInputStream和DataOutputStream使用方法细节探讨
package com.vincent.example; import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class TestDataStream {
public static void main(String[] args) {
// 使用DataInputStream,DataOutputStream写入文件且从文件里读取数据。 try {
// Data Stream写到输入流中
DataOutputStream dos = new DataOutputStream(new FileOutputStream(
"datasteam.txt"));
dos.writeBytes("世界"); //按2字节写入,都是写入的低位
dos.writeChars("世界"); // 依照Unicode写入
// 依照UTF-8写入(UTF8变长,开头2字节是由writeUTF函数写入的长度信息。方便readUTF函数读取)
dos.writeUTF("世界");
dos.flush();
dos.close(); // Data Stream 读取
DataInputStream dis = new DataInputStream(new FileInputStream(
"datasteam.txt"));
// 读取字节
byte[] b = new byte[2];
dis.read(b);
System.out.println(new String(b, 0, 2)); // 读取字符
char[] c = new char[2];
for (int i = 0; i < 2; i++) {
c[i] = dis.readChar();
}
System.out.println(new String(c, 0, 2)); // 读取UTF
System.out.println(dis.readUTF()); dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用16进制方式打开文件例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmlzaHdqeQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
能够看出,第一个“世界”已经被截断,两个汉字都仅仅被写入了低位。因此肯定乱码。
package com.vincent.example; import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class TestDataStream {
public static void main(String[] args) {
// 使用DataInputStream,DataOutputStream写入文件且从文件里读取数据。
try {
// Data Stream写到输入流中
DataOutputStream dos = new DataOutputStream(new FileOutputStream(
"datasteam.txt"));
dos.write("世界".getBytes()); // 按UTF8编码(我的系统默认编码方式)写入
//dos.write("世界".getBytes("GBK")); //指定其它编码方式
dos.writeChars("世界"); // 依照Unicode写入
// 依照UTF-8写入(UTF8编码长度可变。开头2字节是由writeUTF函数写入的长度信息,方便readUTF函数读取)
dos.writeUTF("世界");
dos.flush();
dos.close(); // Data Stream 读取
DataInputStream dis = new DataInputStream(new FileInputStream(
"datasteam.txt"));
// 读取字节
byte[] b = new byte[6];
dis.read(b);
System.out.println(new String(b, 0, 6)); // 读取字符
char[] c = new char[2];
for (int i = 0; i < 2; i++) {
c[i] = dis.readChar();
}
System.out.println(new String(c, 0, 2)); // 读取UTF
System.out.println(dis.readUTF()); dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件打开例如以下:
能够看出,读取前6字节并依照UTF-8解码就能够避免乱码。
值得注意的是。String构造函数也能够指定对byte数组作其它编码方式的解码。比如:new String(b,0,6,"GBK")。同一时候使用writeUTF和readUTF能够免去程序员对于长度的考虑,由于这两个函数为我们攻克了长度问题。写入了文件。因此我们无需关心。但这样就使用了额外的空间去记录长度信息。
DataInputStream和DataOutputStream使用方法细节探讨的更多相关文章
- [十一]JavaIO之DataInputStream 和 DataOutputStream
功能简介 DataInputStream和DataOutputStream 继承了各自的FilterInputStream以及FilterOutputStream 使用装饰器模式对InputStrea ...
- 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出
三组数据如下: {19.99 , 9.99 , 15.99 , 3.99 , 4.99} {12 , 8 , 13 ,29 ,50} {"Java T-shirt" , " ...
- Java之IO(四)DataInputStream和DataOutputStream
转载请注明源出处:http://www.cnblogs.com/lighten/p/6986155.html 1.前言 DataInputStream和DataOutputStream分别继承了Fil ...
- Java IO(十一) DataInputStream 和 DataOutputStream
Java IO(十一) DataInputStream 和 DataOutputStream 一.介绍 DataInputStream 和 DataOutputStream 是数据字节流,分别继承自 ...
- CPU利用率异常的分析思路和方法交流探讨
CPU利用率异常的分析思路和方法交流探讨在生产运行当中,经常会遇到CPU利用率异常或者不符合预期的情况,此时,往往暗示着系统性能问题.那么究竟是核心应用的问题?是监控工具的问题?还是系统.硬件.网络层 ...
- java下DataInputStream与DataOutputStream写入数据的同时写入数据类型
package cn.stat.p2.demo; import java.io.DataInputStream; import java.io.DataOutputStream; import jav ...
- 【转载】Xpath定位方法深入探讨及元素定位失败常见情况
一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...
- Xpath定位方法深入探讨及元素定位失败常见情况
一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...
- java代码----------实现创建DataInputStream和DataOutputStream进行读写
总结: 主要是 捕获异常 package com.a.b; import java.io.*; public class testData { public static void main(Stri ...
随机推荐
- 【剑指offer 面试题47】不用加减乘除做加法
思路: 利用位运算 C++: #include <iostream> using namespace std; int main() { , b = ; int sum, carry; d ...
- java解析properties文件
在自动化测试过程中,经常会有一些公用的属性要配置,以便后面给脚本使用,我们可以选择xml, excel或者json格式来存贮这些数据,但其实java本身就提供了properties类来处理proper ...
- C# 一个简单的秒表引发的窗体卡死问题
一个秒表程序也是我的一个心病,因为一直想写这样的一个东西,但是总往GUI那边想,所以就比较怵,可能是上学的时候学MFC搞出的后遗症吧,不过当我今天想好用Win Form(话说还是第一次写win for ...
- matlab的&和&&操作
A&B(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算.(2)A和B可以为矩阵(e.g. A=[1 0],B=[0 0]).A&&B(1)首先判断A的逻辑值,如果 ...
- rhel5.5 Oracle10g安装记录
---恢复内容开始--- Rhel5.5 Oracle10g安装成功截图如下
- Time vs Story Points Estimation [转]
One of the most common questions we get is whether to estimate in time or points. It seems like poin ...
- 第三百五十六天 how can I 坚持
一年了,三百五十六天.写个算法算下对不对. 今天突然想买辆自行车了.云马智行车,还是捷安特,好想买一辆. 网好卡.貌似少记了一天呢,357了.好快. 睡觉了,还没锻炼呢,太晚了. 1458748800 ...
- 关于Windows Azure 地缘组(Affinity Groups)
最近在和一些客户和朋友的沟通中,发现Windows Azure地缘组概念很少有了解.我的建议是使用地缘组来优化同一区域内的网络访问速度.如果我的说法有误,欢迎大家指正. 关于“地缘组”的概念(摘自MS ...
- 山东意外险风险信息推送V7非车
<?xml version="1.0" encoding="GBK"?><Packet type="REQUEST" ve ...
- POJ 2886Who Gets the Most Candies?(线段树)
POJ 2886 题目大意是说有n个人围成一圈,游戏的起点是k,每个人持有一个数字(非编号)num,每次当前的人退出圈,下一个人是他左边的第num个(也就是说下一个退出的是k+num, k可以为负数, ...