-
1 对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化 2 序列化流(ObjectOutputStream),是过滤流----WriteObject 反序列化流(ObjectInputStream)----readObject 3 序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常 这个接口,没有任何方法,只是一个标准查看全部
-
http://img1.sycdn.imooc.com//554b59770001a88a12000530-500-284.jpg查看全部
-
随机读取文件有一个很大的好处,例如进行文件下载时候,这个文件很大用五个程序同时去下载,每个程序去下载一部分,最终要把这个文件再拼接成一个文件就要知道每个部分的开始与结束位置(即file.getFilePointer();随机读取指针的位置)。 迅雷为例!!! RandomAccessFile : java提供的对文件内容的访问 既可以读文件 也可以写文件 支持随机访问文件 可以访问文件的任意位置 (1)java文件模型 : 在硬盘上的文件是byte byte byte 存储的 是数据的集合 (2)打开文件 有两种模式 rw 读写 r只读 RandomAccessFile raf=new RandomeAccessFile(file,"rw"); 文件指针, pointer=0; (3)写方法 raf.write(int) ----> 只写一个字节 (后8位) 同时指针指向下一个位置 准备再次写入 (4)读方法 int b=raf.read(); 读一个字节 (5)文件读写完成后一定要关闭 oracle 官方说明 raf.write(int) 写八位。 实际操作的是低八位。为了让低八位变成高八位,就要先把高八位变成低八位。 因为int i=0x7fffffff;Int有符号(最高一位表示正负), 所以 一共有4*8-1位可以用来表示数字其中最高位是0-7 raf.write(i>>>24),将i右移24位,那么i 就应该是0x0000007f 写入 7f 顺序写入的话,最先写的最然成了最左边, 就成了高位 raf.write(i>>>16),将i右移16位,那么i 就应该是0x00007fff //写入ff raf.write(i>>>8),将i右移8位,那么i 就应该是0x007fffff //写入ff raf.write(i),那么i 就应该是0x7fffffff //写入ff 所以一共写入了7fffffff,从时间上来看,7f最先写就成了最高位 byte [] buf=new byte[(int)raf.length];//表示是定义了一个长度为raf文件大小的定长字节数组 定义大小时只能填入整型int。所以最大就是Integer.MAX_VALUE查看全部
-
5.字符流:字符流分为输出流(Reader)和输出流(Writer)。操作的是文本文件。 字符处理,一次处理一个字符 字符处理底层还是基本的字节序列 InputStreamReader:完成byte流解析为char流,按照编码解析 FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt"); //获取字符输入流 InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式 OutputStreamWriter:提供char流到byte流,按照编码处理 FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt"); //获取字符输出流 OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8"); FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。 FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流 FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流查看全部
-
File.seperater();获取系统分隔符,如:"\" file.mkdir()或者file.mkdirs()创建目录 直接打印file获得文件的路径 file.getAbsolutePath()获取文件的完整路径; file.getName()获取目录(或文件)的名字 file.getParent()获取父目录的路径查看全部
-
1、byte 类型 8 位,int 类型 32 位,为了避免数据转换错误,通过 & 0xff 将高 24 位清零查看全部
-
2.字符流 (操作的是文本 文本文件) 注意默认的编码方式 1)编码问题 2)认识文本和文本文件 java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码) 文件是byte byte byte 的数据序列 文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化byte的存储 3)字符流(Reader Writer) 字符的处理,一次处理一个字符 字符的底层依然是基本的字节序列 4)InputStreamreader 完成byte流解析成char流 按照编码解析 OutputStreamWrite 提供char流到byte流 按照编码处理 FileInputStream in=new FileInputStream("e:\\javaio\\imooc.txt"); InputSreamStreamReader isr=new InputStreamReader(in);//默认项目编码 gbk 可改成 utf-8 int c; while((c=isr.read())!=-1){ syso -> char(c) } //一次读一个字符数组 char[] buffer=new char[8*1024]; int c; while ((c=isr.read(buffer,0,buffer.length))!=-1){ 批量读取放入buffer这个字符数组 从第0个位置开始防止,最多放置buffer.length个 String s=new String(buffer,0,c); syso -> s; }查看全部
-
java是双字节编码(utf-16be): 中文两个字节 英文两个字节; GBK:中文占两个字节,英文1个字节; utf-8:中文占三个字节,英文占1个字节。 中文系统下:ANSI编码代表GBK编码。查看全部
-
java是双字节编码 utf-16be 中文两个字节 英文两个字节 GBK中文占两个字节,英文1个字节;utf-8中文占三个字节,英文占1个字节。 文本文件,就是字节序列。可以是任意编码的字节序列,如果我们是在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码。(联通、联这是一种巧合,他们正好符合了utf-8编码的规则。) Eclipes中什么样子的编码项目就只认识该编码的文字,换一种编码就会出现乱码。 当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码 String(byte[] bytes) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。 String s="慕课ABC"; byte[] bytes1=s.getBytes(); //转换成字节序列用的是项目默认的编码gbk for (byte b:bytes1){ //把字节转换成了int 以16进制的方式显示 system.out.println(Integer.toHexString(b & 0xff)+" "); // c4 bd bf ce 41 42 43 } byte[] bytes2=s.getBytes("gbk"); //手动定义用gbk编码 效果相同 但会有异常 中文两个字节 英文一个 byte[] bytes3-s.getBytes("utf-8"); // e6 85 95 e8 af be 中文三个字节 英文一个 //java是双字节编码 utf-16be 中文两个字节 英文两个字节 byte[] byte4=s.getBytes("utf-16be"); String str1=new String(bytes4); //会出现乱码 当你的字节序列是某种编码时,这个时候把自己序列变成字符串,也需要用这种编码方式,否则会出现乱码 String str2=new String(bytes4,"utf-16be"); //这样就不会出现乱码了查看全部
-
transient修饰,该元素不会进行jvm默认的序列化,但是不代表不能做序列化,也可以自己实现序列化 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundExceptioin查看全部
-
对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化。 序列化流(ObjectOutputStream),是过滤流 -- writeObject 反序列化(ObjectInputStream)-- readObject 序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化操作,否则将出现异常 这个接口,没有任何方法,只是一个标准查看全部
-
A:批量字节读取最快(数组),B:缓冲读取其次,C:DateOutputStream再次(可以更加方便的读取 int,long, 字符等类型数据)D:单字节读取最慢! BufferInputStream&BufferOutputStream 这两个流类为IO提供了带缓冲的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,提高了IO性能 从应用程序中吧文件输入,相当于将一缸水导入另一缸水; FileOutputStream-->write()相当于一滴一滴把水转移过去 DataInputStream-->writeXXX()方便一些,相当于一瓢一瓢把水转移过去 BufferedInputStream-->write()更加方便一些,相当于将水先存入桶中,一桶转查看全部
-
readInt readLong 方法都是对FileInputStream方法的包装 DataOutputStream/DataInputStream 对“流”功能的扩展,可以更加方便的读取 int,long, 字符等类型数据 DataOutputStream:使用FileOutputStream构造出来,通过包装FileOutput,可以调用FileOutput类的write方法来构造新的更方便的写方法: new DataOutputStream(new FileOutptStream(file)) wrieteUTF()采用utf-8编码写出字符串 用utf-16be写出字符串,或字符串数组 写完之后一定要关闭流 数据输入输出流: DataInputStream、DataOutputStream 是对“流”功能的扩展,方便读写 DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); dos.writeInt(10); dos.writeLong(10l);字母l dos.writeDouble(10.5); //采用utf-8编码写出 dos.writeUTF("中国"); //采用utf-16be编码写出 dos.writeChars("中国");查看全部
-
1、byte 类型 8 位,int 类型 32 位,为了避免数据转换错误,通过 & 0xff 将高 24 位清零 2、long time = System.currentTimeMillis() 当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量) 3、is.read() 单字节适合读取 小 文件 is.read(byte[] bytes,int star,int size) 字节数组适合读取 大 文件查看全部
-
IO流(输入流、输出流) 字节流、字符流 1.字节流 1)InputStream、OutputStream InputStream抽象了应用程序 读取 数据的方式 OutputStream抽象了应用程序 写出 数据的方式 2)EOF = End 读到-1就读到结尾 3)输入流基本方法 下面的in代表了输入流的对象 int b = in.read(); 返回一个整数,读取一个字节 无符号填充到int低八位.-1是 EOF in.read(byte[] buf) 读取数据填充到字节数组buf in.read(byte[] buf,int start,int size) //读取数据到字节数组buf 从buf的start位置开始 存放size长度的数据 4)输出流基本方法 out.write(int b) 写出一个byte到流,b的低8位 out.write(byte[] buf)将buf字节数组都写入到流 out.write(byte[] buf,int start,int size) //字节数组buf从start位置 开始写size长度的字节到流 5)FileInputStream--->具体实现了在文件上读取数据 //本身继承了InputStream查看全部
举报
0/150
提交
取消