io流

IO流,对象序列化

老子叫甜甜 提交于 2019-11-29 00:14:12
对象序列化  序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或者用于网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。  对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则是指从IO流中恢复该Java对象。如要让某个对象支持序列化机制,则必须要让它的类是可序列化的(Serializable)。为了让某个类是可序列化的,该类需要继承如下两个接口之一:   1. Serializable接口   2. Externliazble接口 我们先从Serializable接口开始说起。当类继承了Serializable接口时,该类是可序列化的,即创建出来的对象,可以写入磁盘或者用于网络传输(基本上用于网络传输的类都是序列化的,否则程序会出现异常。若有接触过Java web开发的同学,在web应用中的HttpSession 或ServletContext就是可序列化的类)。 我们如何操作输入/输出可序列化的对象呢,答案是使用ObjectInputStream与ObjectOutputStream的字节流进行操作,这两个流不仅仅是字节流还是处理流,因此需要一个任意节点流作为基础。 下面实现将可序列化对象写入文件,并从该文件读取该对象

Java复习----IO流(二)

血红的双手。 提交于 2019-11-28 22:29:42
补充程序: /******** * 该程序会在D盘创建一个文件夹testDir * 在该文件夹下又创建子文件夹和文本文件 * 最后删除testDir下的一个子文件夹test1 * ********/ import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) { File f=new File("D:"+File.separator+"testDir"); if(f.getParentFile().exists()) {//检查路径"D:\"是否存在 if(f.isDirectory()) {//检查是否存在同名路径 System.out.println("已存在同名路径,将被覆盖!"); } f.mkdir(); }else { System.out.println("路径错误!"); System.exit(1); } //创建子文件夹 String[] path =new String[10]; for(int i=0;i<path.length;i++) { path[i]="test"+i; } //创建一些文件 String[] file =new String[5]; for(int i=0;i<file

Day24 IO流---转换流和缓冲流

十年热恋 提交于 2019-11-28 20:40:14
一、转换流 将字节流转换为字符流,来操作文本文档 转换流可以设定制定编码表 1、构造方法 (将字节输入流转为字符输入流) (将字节输出流转为字符输出流) (常用方法就是字符流的常用方法) public class ReaderTest { public static void main ( String [ ] args ) throws IOException { InputStreamReader isr = new InputStreamReader ( new FileInputStream ( "D:\\test\\c.txt" ) ) ; int read = isr . read ( ) ; System . out . println ( ( char ) read ) ; } } public class ReaderTest { public static void main ( String [ ] args ) throws IOException { OutputStreamWriter isw = new OutputStreamWriter ( new FileOutputStream ( "D:\\test\\b.txt" , true ) ) ; String s = "hahahaha" ; isw . write ( s ) ; isw .

java第14周实验(IO流)

限于喜欢 提交于 2019-11-28 18:42:40
0. 字节流与二进制文件 我的代码 public class WriterStu { public static void main(String[] args) { DataOutputStream dos = null; Student[] stus = new Student[100]; Student d1 = new Student(1, "x", 18, 99.5); Student d2 = new Student(2, "x", 19, 100.0); Student d3 = new Student(3, "x", 20, 59.5); try (FileOutputStream fos = new FileOutputStream(new File("e:/Student.data"))) { dos = new DataOutputStream(fos); for (Student student : stus) { dos.writeInt(student.getId()); dos.writeUTF(student.getName()); dos.writeInt(student.getAge()); dos.writeDouble(student.getGrade()); } } catch (FileNotFoundException e) { e

java IO流 之 字节流与字符流

£可爱£侵袭症+ 提交于 2019-11-28 17:53:33
其实学习了file文件基础类,后面的字节流和字符流都特别简单了,首先需要知道字节流和字符流的区别 字节流:   用来传送图片、各种文件、大文件、文本都是通过字节流进行传输的。 字符流:   只能读取文本信息 字节流操作接口类   1、InputStream 字节输入流   2、outputStream 字节输出流   3、FileinputStream 实例化字节输入流   4、FileoutputStream 实例化字节输出流   5、BufferedInputStream 加强版输入流,用于大文件传输时输入缓存   6、BufferedOutputStream 加强版输出流,用于大文件传输时输出缓存 /** * 文件copy 加强版(用的最多的) 几个G的文件也就10几秒 * * @param file 传入文件的路径 * @return */ public static boolean Read(File file) { // File file = new File("D:\\1.txt"); if (file == null || file.isFile()) { System.err.println("文件不能为空"); return false; } BufferedOutputStream bos = null; BufferedInputStream bis =

IO流的String和Byte的相互转化

£可爱£侵袭症+ 提交于 2019-11-28 15:56:16
在Java中IO输入流通常读入的是String,但是在字节流中的传递的始终是用字节,Byte 于是就会用到Byte和String的相互转化 // String2Byte byte[] c = str.getBytes(); //Byte2StringString value = new String(byte1,0,ins);System.out.println(value); public class Demo2 { public static void main(String[] args) { File file = new File("D:\\b.txt"); File file1 = new File("D:\\c.txt"); try { FileInputStream inputStream = new FileInputStream("src\\main\\java\\com\\nowcoder\\Gday09\\a.txt"); FileReader fileReader = new FileReader("src\\main\\java\\com\\nowcoder\\Gday09\\a.txt"); FileOutputStream fileOutputStream = new FileOutputStream(file); FileOutputStream

数据读写API——IO流

假装没事ソ 提交于 2019-11-28 10:41:01
理清一些概念 1.Java 中的IO是干啥的? IO指的是Input和Output,主要目的是实现数据在存储介质之间的传输。【流:数据流,类比与水流的流动】 2.IO分类 按照操作单元来划分,可以分为字节流和字符流。 4.字节流和字符流的区别 字节流顾名思义操作的数据单元是1个字节,也就是8位; 那么问题来了,一个中文字符用GBK编码占用两个字节,用UTF-8占用三个字符。 字节流在传输有中文字符的数据时会产生编码错误。 而字符流可操作2个字节,也就是16位。那么在GBK的编码下,支持中文数据传输。 总结如下 字节流一次读取一个字节,字符流两个 字节流可以处理所有类型数据,字符流只能处理字符类数据 4.字符编码的前世今生 ASCII 码 计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 0 和 1 两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。 也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 00000000 到 11111111 。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。 【ASCII 码==英文字符和二进制之间的映射关系】 Unicode 世界上存在着多种编码方式

文件和流

╄→гoц情女王★ 提交于 2019-11-28 06:23:35
IO流:文件和流 回顾 Collection接口 add remove contains clear iterator |_____List (特点:有序的,可以重复) |___ArrayList (存储结构:数组) 查找遍历快,添加删除慢 |___LinkedList (链表)添加删除快,查找遍历慢 |___Vector 数组 (线程安全的) |___Stack 数组(栈)先进后出 | |_____Set(特点:无序的,不能重复) |_____HashSet 哈希表(jdk1.7数组加链表jdk1.8数组链表红黑树) 1 执行hashCode()来计算存储的位置 ,2 执行equals比较结果 |____LinkedHashSet 哈希表 可以保证顺序 |____TreeSet 自平衡红黑二叉树 1 元素要实现Comparable接口 ,2 定制比较器 Comparator Map(特点:存储键值对,键不能重复,一个键对应一个值,值可以重复,无序) |______ HashMap 哈希表 1 执行hashCode()来计算存储的位置 ,2 执行equals比较结果 |______ Hashtable 哈希表 不能存储null键和null值,线程安全的 jdk1.0----》Properties子类 |_______LinkedHashMap 哈希表 可以保证顺序 |______

Java中的I/O流

别来无恙 提交于 2019-11-28 05:55:47
一、什么是IO 庆哥:小白,你知道什么是IO吗? 小白:我英文不是太好,但是在这里这个I指的应该是input,而这个O指的则是output吧!对于IO我的认识就是输入输出了,不知道这样理解是否正确! 庆哥:对于IO我们理解成输入输出很正确,但是我们一定要注意一个非常重要的点那就是“流”,什么意思呢?在这里我们更准确的来说其实是输入输出流,因为我们在讨论IO的时候,流则是关键中的关键,我也听过很多人对IO的描述就是输入输出流,这其实是IO的一种分类,在这里想给你说下对于IO我们可以如下分类 按数据流向分类 输入流和输出流 按处理的数据类型分类 字节流和字符流 不知道看到这里你有什么发现没? 小白:到这里我发现了两个比较重要的关键词,那就是数据和流 庆哥:非常正确,我们之前说过我们在说IO的时候一定逃不过“流”的概念,而另外一个同样重要的就是数据了,那到底什么是流呢? 揭秘输入输出流中的“流” 小白:我们常说的IO流和输入输出流中的这个流应该是一样的吧! 庆哥:没错,这确实是一样的,那么该怎么理解这个流呢?这里我们完全可以类比这水流去理解,只不过我们这里的流指的则是数据了,结合两个概念“流”和“数据”也就得到我们的重点数据流,就如同我们的水流一样,对于水流,那流入流出的都是水,而我们的数据流流入流出的自然就是数据了,所以记住非常重要的一句话 流的本质就是数据传输 那么现在我问你

java基础-泛型、IO流

丶灬走出姿态 提交于 2019-11-28 05:39:06
一:泛型 泛型 :java中的参数化类型被称为泛型。以集合为例,集合可以使用泛型限制被添加元素的数据类型,如果将不符合指定数据类型的元素添加到集合内,编译就会报错。例如,Set<String>表明Set集合只能保存字符串类型的对象。 1、在集合中使用泛型。 /** * @Author: 随心的小新 * @Date: 2019/8/21 10:24 * 在集合中使用泛型 * 在实例化集合类时,可以指明具体的泛型类型。 * 泛型的类型必须是个类。 * 如果实例化时,没有指明泛型的类型,默认类型为Object类型。 */ public class GenericTest { // 在集合中使用泛型,以ArrayList为例 public void test1(){ ArrayList<Integer>arrayList = new ArrayList<> ( ); arrayList.add ( 1 ); arrayList.add ( 123 ); // 编译时,就会进行类型检查,保证数据的安全 // arrayList.add ( "tom" ); // 一:方式一: for (Integer sc : arrayList){ // 避免了强转操作 int score = sc; System.out.println(score) ; } // 方式二: Iterator