可以。复制文本文件。
00 06 ---> 这两字节表示的是字符串s占6个字节
e4 b8 ad e5 9b bd --->"中国"的utf-8编码
4e 2d 56 fd --->"中国"的utf-16be编码
writeChars是写一个序列的UCS2编码字符串,要用readChar逐个读取
1个字节是8位
只有8种基本类型可以算.其他引用类型都是由java虚拟机决定的自己不能操作
byte 1字节
short 2字节
int 4字节
long 8字节
float 4字节
double 8字节
char 2字节
boolean 1字节
1. demo/dos.dat 用的是相对路径,实际在那个java项目的文件夹里面
2. 零基础的我建议还是先从最基础的开始学,基础打好了听起来就会比较容易,然后还是要多练习,自己总结一些经验,大概什么东西要怎么写之类的,这样会好一点。
我也是 写进去的数字是乱码或者符号
file是参数。调用方法printHex()的参数。
打印16进制的是Integer.printHexString();
真的皮
10在倒数第五行最后一个啊。。。。
当然有,因为它是封装的函数,底层还是以字节来操作的
就是,我往记事本里写了几个汉字,然后读取,每次都是先读取出一个?,然后再出现我写的汉字
printHex你这个方法是否写了输出时换行
为什么乱码
肯定是乱码啊, 你使用了DataOutputStream,把int long String 都存了进去。你打开这个文件,使用系统的notepad程序,notepad程序不知道你这个什么编码,用了ansi,吧intlong什么都放在一起当GBK处理了。
怎么做不乱码
不要用记事本打开DataOutputStream创建的东西,看不到乱码,眼不见心不烦。
你自己知道是什么,用DataInputStream或者InputStream能取出来用就行了。
是的。
比如你写入一个int,一个long。。。
然后先读一个long,它就会读取int的四个字节,加上long的四个字节,这样就会出现数据错误。
String file="demo/dos.dat";//这里只是定义一个字符串
DataOutputStream dos=new DataOutputStream(new FileOutputStream(file));
//在括号里面创建了一个FileOutputStream,并给了DataOutputStream做了参数
Hello前面多了一个转义\? 转义可以用一个反斜杠
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"gbk");
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"gbk");
编码问题,你看看你工程的编码和你输出保存文件的编码是不是一致.
Alt+/
你这里只是创建文件:“ext1.txt”,并打开流通道写到文件:“ext1.txt”,但是你没有东西写到文件:“ext1.txt”,你打开文件:“ext1.txt”,当然没有东西了,最好写入文件时刷新流通道且关闭流通道。
writeInt(int v)
将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。
数字是以16进制写入的
查看API文档可知:00 06代表的是“中国”所占字节数,共6个,而读出时不会理会这两个字节,读出的仍是“中国”,不知这样解释你是否明白,注意多看官方API文档。
好像是ctrl+左键
鼠标放到DataInputStream上,按住Ctrl键的同时,单击鼠标左键
那个是上一节课老师写的类中的一个方法,所以跟这一节课没什么关系。它是独立执行的。
额,真的必须要按照顺序读取
00 06 ---> 这两字节表示的是字符串s占6个字节 ( String s = dis.readUTF(); )
e4 b8 ad e5 9b bd --->"中国"的utf-8编码
4e 2d 56 fd --->"中国"的utf-16be编码
public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根
String file="demo/dos.txt";
DataOutputStream dos=new DataOutputStream(new FileOutputStream(file));
dos.writeInt(10);
dos.writeInt(-10);
dos.writeLong(10L);
dos.writeDouble(10.5);
dos.writeChar('a');
dos.writeBoolean(true);
//采用UTF-8编码写出
dos.writeUTF("中国");
//采用UTF-16be编码写出
dos.writeChars("我爱你");
//dos.close();
数据流入与流出.printHex(file);
DataInputStream dis=new DataInputStream(new FileInputStream(file));
int i=dis.readInt();
System.out.println(i);
i=dis.readInt();
System.out.println(i);
long ii=dis.readLong();
System.out.println(ii);
double iii=dis.readDouble();
System.out.println(iii);
char iiii=dis.readChar();
System.out.println(iiii);
boolean iiiii=dis.readBoolean();
System.out.println(iiiii);
//采用UTF-8编码读出
String iiiiii=dis.readUTF();
System.out.println(iiiiii);
//采用UTF-16be编码读出
char i2;
while((i2=dis.readChar())!=-1){
System.out.print(i2);
}
}
正常的读取readInt是读4次,每次读8位,当读到末尾时返回-1,当(ch1|ch2|ch3|ch4)<0时,说明其中有一个值是-1,这是错误的结果,所以抛出异常。
谢谢啦,太不仔细了