- 浏览: 119640 次
- 性别:
- 来自: 广西
文章分类
最新评论
-
greemqqran:
这方法 源码,是怎么的哦?
可变参数,数组与集合之间的转换 -
greemqqran:
Arrays.asList
可变参数,数组与集合之间的转换 -
ricoyu:
引用? super E:接收的是E类型对象应该是: ? sup ...
泛型-
IO: 用于设备上的数据处理。 IO的分类: 字符流,字节流。 在早期时,只有字节流,后期为了方便处理不同的文字出现了字符流。 因为编码的原因,而出现字符流。 所有IO体系中的对象通常都以自己所属的父类名作为子类名的后缀名。 IO体系顶层类: 四个抽象基类: 字节流: InputStream OutputStream。 字符流: Reader Writer。 使用了字符流中的子类对象。因为要操作的是硬盘的文件。 所以使用了FileReader,FileWriter. 需求: 在硬盘上建立一个文件,并往文件中写入内容。 1,建立字符写入流对象。 建立了流对象,调用了window资源,在指定位置创建了demo.txt文件。先建立了数据存储的目的。 但是因为传递参数的原因,有可能出现IO异常。 如果指定目录下已有该文件会出现覆盖操作。 如果需求是在原有文件中进行数据的续写。要在构造时,传入另一个参数true。new FileWriter("demo.txt",true); FileWriter fw = new FileWriter("demo.txt"); 2,调用流对象写入方法,将数据写入到流中。 fw.write("abcdec");//fw.write("abcd".toCharArray()); 3,对流中的数据进行刷新,将数据刷到目的当中。 fw.flush(); 可以进行频繁写入,并刷新。。。。 4,关闭资源,会刷新它先。 fw.close(); public void show() { FileWriter fw = null; try { fw = new FileWriter("c:/demo.txt"); fw.write("abced"); } catch(IOException e) { System.out.println(e.toString()); } finally { /* if(fw!=null) try { fw.close(); } catch(Exception e) { e.printStackTrace(); } */ closeAll(fw,null); } } 需求: 读取硬盘上的数据,并将其打印在控制台上。 //1,建立字符读取流对象。先用流对象与要读取的文件相关联。必须要保证该是存在的,否则会发生FileNotFoundException。 FileReader fr = new FileReader("demo.txt"); //2,定于一个临时容器,因为读到的都是字符数据,所以建立一个字符数组。 该数组的长度如何定义呢?以计算机的基本单位或者其整数倍作为长度 char[] arr = new char[1024]; //3,使用读取流对象的read(arr)方法,将读取到每一个字符数据存入到数组中。 该方法会读到的字符个数。其实就是往数组里面装的元素的个数。 int num = 0; while((num=fr.read(arr))!=-1) { System.out.println(new String(arr,0,num)); } //4,关闭资源。 fr.close(); 注意:读取流还有一个read()方法,该方法是没有参数的,一次读一个字符,并将读到的字符返回。 int ch = 0; while((ch=fr.read())!=-1) { System.out.println((char)ch); } 需求: copy文本文件 public void show() { FileReader fr = null; FileWriter fw = null; try { fr = new FileReader("demo.txt"); fw = new FileWriter("copydemo.txt"); char[] arr = new char[1024]; int num = 0; while((num=fr.read(arr))!=-1) { fw.write(arr,0,num); } } catch(Exception e) { ystem.out.println(e.toString()); } finally { closeAll(fw,fr); } } public void closeAll(Writer w,Reader r) { if(w!=null) try { w.close(); } catch(Exception e) { e.printStackTrace(); } if(r!=null) try { r.close(); } catch(Exception e) { e.printStackTrace(); } } ----------------------------------------- 为了提高了对流的操作效率,出现了缓冲技术,提高了流的操作效率。 该缓冲技术也被封装成了对象。 对于字符流: BufferedWriter: newLine();跨平台的换行符。 BufferedReader readLine():一次获取一行数据。不包括回车符。 缓冲技术,是为了提高流的效率,所以缓冲对象在初始化的时必须要有流。 使用缓冲技术一定要使用flush(); 需求:通过缓冲技术对文本数据进行copy. public void show() { FileReader fr = new FileReader("demo.txt"); BufferedReader bufr = new BufferedReader(fr); FileWriter fw = new FileWriter("bufdemo.txt"); BufferedWriter bufw = new BufferedWriter(fw); String line = null; while((line=bufr.readLine())!=null) { bufw.write(line); bufw.newLine(); bufw.flush(); } bufw.close(); bufr.close(); //closeAll(bufw,bufr); } 缓冲技术的出现对流的读取和写入都进行了增强。 其实就是将一个数组封装在缓冲对象中。 这里就用到了一种设计模式:装饰设计模式。 该模式可以对类中的功能进行增强,优化了继承。 通过继承一样可以完成对类功能的增强,为了还要装饰呢? Writer |--FileWriter |--BufferFileWriter |--MediaWriter |--BufferMediaWriter |--DateWriter |--BufferDateWriter 为了增强子类的操作效率。想到了缓冲技术。通过继承的方法,在子类中建立带缓冲技术的功能。 但是在设计方式中,发现该体系变的比较臃肿,而且功能都在重复。 那么,进一步优化该设计。 可不可以将缓冲技术进行抽取,单独进行描述。 想要对这些子类进行增强时,只要将每一个子类作为参数传递给缓冲类的构造函数即可。 Writer |--FileWriter |--MediaWriter |--DateWriter |--Buffer class Buffer { Buffer(FileWriter w) {} Buffer(MediaWriter w) {} Buffer(DateWriter w) {} } 发现这样设计不具备扩展性。 因为传递的都是Writer的子类,只要建立父类引用即可,多态。 class Buffer extends Writer { Buffer(Writer w) {} } --------------------------------------- readLine():原理:其实还是用底层read方法,只不过将每一次读到的字符进行临时存储, 当读到回车符,将临时存储的数据一次性返回。 class MyBufferedReader { private Reader r; MyBufferedReader(Reader r) { this.r = r; } public String myReadLine()throws IOException { StringBuilder sb = new StringBuilder(); int ch = 0; while((ch=r.read())!=-1) { if(ch=='\r') continue; if(ch=='\n') return sb.toString(); else sb.append((char)ch); } if(sb.length()!=0) return sb.toString(); return null; } public void myClose()throws IOException { r.close(); } } ----- 带行号 class MyLineNumberReader extends MyBufferedReader { private int myNumber; MyLineNumberReader(Reader r) { super(r); } public void setMyNumber(int myNumber) { this.myNumber = myNumber; } public int getMyNumber() { return myNumber; } public String myReadLine()throws IOException { myNumber++; return super.myReadLine(); } }
发表评论
-
动态代理+注解实现用户权限控制
2012-12-23 00:01 1336首先第一步我们需要定义一个接口UserDao p ... -
JDK动态代理模式
2012-12-22 21:51 898package cn.dhcool.dynamic.proxy ... -
代理proxy模式
2012-12-22 20:45 0静态代理模式: 需要有一个公共的借口,还有一个真实的实现类, ... -
工厂模式下出现的问题-null异常
2012-12-15 18:31 917遇到了一个问题: public class Dao ... -
内部类详解
2011-12-09 21:23 659从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论 ... -
动态代理实现
2011-11-22 02:03 1042package com.dhcool.proxy; ... -
内省总结
2011-11-19 02:43 827package com.dhcool.introspec ... -
线程锁
2011-10-10 13:27 819sleep(), wait(),yield(),这3个方法,s ... -
类似百度谷歌分页算法实现
2011-09-08 15:58 1580<%@ page language="j ... -
充当服务端代码
2011-08-05 16:53 671import java.net.*; import java ... -
获取文件中邮件的示例
2011-08-05 12:25 735import java.util.regex.*; impo ... -
正则表达式常用字符
2011-08-05 12:22 910构造 匹配 字符 x 字符 x ... -
正则表达式
2011-08-05 12:16 837第一种:1.定义匹配规则如:String qqreg = &q ... -
InetAddress
2011-08-04 21:59 900import java.net.*; class Inet ... -
B/S socket
2011-08-04 21:08 1027import java.net.*; import java ... -
TCP多线程文件上传
2011-08-04 14:51 892/* 上传图片 */ import java.io.*; ... -
网络编程基础
2011-08-04 14:25 837网络编程: 网络通讯中所需要了解的一些内容。 T ... -
一道题
2011-08-02 21:05 612/* 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据 ... -
TCP
2011-08-02 20:46 773import java.net.*; import ja ... -
UDP
2011-08-02 20:35 859import java.net.*; import java ...
相关推荐
总结起来,`android io.socket.client.zip` 包含的这些组件共同构成了Android平台上使用 `socket.io` 进行即时通讯的基础。`socket.io-client.jar` 提供了与服务器通信的API,依赖的库如 `fastjson`、`okhttp` 和 `...
IO流(Input/Output Stream)是Java进行输入输出操作的基础,分为字节流和字符流两类。字节流处理单个字节的数据,如FileInputStream和FileOutputStream,而字符流处理Unicode字符,如BufferedReader和PrintWriter。...
5. **IO流**:字节流与字符流,缓冲流,对象序列化,文件操作,输入输出流的关闭。 6. **多线程**:线程的创建方式(继承Thread类和实现Runnable接口),线程同步(synchronized关键字,wait(),notify(),...
IO流是Java中处理输入输出的重要机制,分为字节流和字符流两大类。字节流主要处理字节数据,如图片、视频、音频等非文本信息,包括InputStream和OutputStream作为基类,以及它们的子类如FileInputStream和...
为了更深入地理解这一过程,你可以通过学习Java的IO流和字符编码相关知识,以及熟悉HTTP协议中的请求参数传递方式。此外,对于网络开发者来说,掌握字符编码原理有助于解决跨平台、跨浏览器的文本显示问题,避免出现...
通过实际操作,掌握Java提供的各种字节流类和字符流类的功能与使用方法,具体包括: - 文件与流的基本概念。 - Java流的层次结构。 - 字节流类与字符流类的功能和使用方法。 #### 二、实验内容分析 ##### 1. 文本...
- **IO流**:学习IO流的概念,区分字节流和字符流,掌握文件流、转换流、缓冲流和对象流的使用。 - **流的组合**:使用不同的流实现文件内容的拷贝,了解RandomAccessFile和Properties类的用途。 **第七阶段:多...
掌握FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等基本流的使用,以及流的分类(字符流与字节流)、转换流和对象流的操作,可以让你更好地进行文件操作和网络通信。 五、多线程 Java提供了...
10. **输入输出流**:基础的文件读写操作,以及IO流的分类和使用。 11. **接口与内部类**:接口的定义、实现,以及内部类(成员内部类、局部内部类、匿名内部类)的使用场景。 12. **文件与目录操作**:在Java中...
IO 体系包括字节流和字符流两种,字节流用于文件的读写操作,字符流用于文本文件的读写操作。 六、多态的好处和弊端 多态可以提高程序的可维护性和扩展性,因为多态可以使得父类的引用可以指向子类对象,从而可以...
- Java的IO流分为字节流和字符流,还有输入流和输出流,以及缓冲流、转换流等。 - NIO(New IO)引入了通道(Channel)和缓冲区(Buffer),支持非阻塞I/O,提高了效率。 7. **反射与注解** - 反射API允许程序在...
Java的IO流用于数据的读写,包括文件操作、字符流和字节流,以及缓冲流和对象序列化。 11. **集合框架**: 学习ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及泛型和迭代器的概念。 12. **枚举与...
- 字符流和字节流。 - `Reader`、`Writer`、`InputStream`、`OutputStream`。 45. **NIO的原理以及NIO和BIO的区别** - **NIO**(New I/O): 基于通道(Channel)和缓冲区(Buffer)的模型。 - **BIO**(Blocking I/O):...
6. **IO流**:Java的IO流用于数据输入输出,分为字节流和字符流两类,包含许多类和接口。考生需掌握流的读写操作,以及缓冲区的概念,了解FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等常用...
### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...
- 字节流和字符流的区别,以及InputStream、OutputStream、Reader、Writer的使用。 - 文件操作:File类的常见方法,以及RandomAccessFile的使用。 - 缓冲流:BufferedInputStream、BufferedOutputStream、...
- **IO流**:字节流与字符流,缓冲流,对象序列化。 - **网络编程**:TCP/UDP协议,Socket编程。 - **设计模式**:常见的23种设计模式及其应用场景。 - **数据库相关**:SQL语句,JDBC操作,事务处理。 这些...
5. IO与NIO:掌握文件操作、字节流、字符流、对象流的使用,以及NIO(非阻塞I/O)的优势和应用。 阶段项目:企业办公辅助系统,实现即时通讯功能,包括人员管理、聊天、文件传输等功能。通过此项目,学生将能够编写...
1. 流的分类:掌握字节流和字符流,以及输入流和输出流的概念。 2. 文件操作:了解File类的常用方法,以及FileInputStream和FileOutputStream的使用。 3. 转换流:理解BufferedReader和BufferedWriter的作用,以及...
- **流**:数据传输的通道,分为字节流和字符流,包括输入流和输出流。 - **缓冲区**:NIO引入了缓冲区,提高数据读写效率。 - **文件操作**:创建、删除、读取和写入文件。 6. **多线程** - **线程**:程序中...