随便记录 比较凌乱
1 I/O
1 流
流:数据源-----程序,从一端移动到另一段,是一连串连续流动的数据的集合。 输入/输出流的划分是相对程序而言的,并不是相对数据源。
Java.io包为我们提供了相关的API,实现了对所有外部系统的输入输出操作。
节点流:可以直接从数据源或目的地读写数据
处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装,目的主要是简化操作和提高性能。(可以对其他流进行处理)
字节流:按照字节读取数据(InputStream\OutPutStream),凡是带Stream的全是字节流
字符流:按照字符读取数据(Reader\Writer),因为文件编码的不同,从而有了对字符进行高效操作的字符流对象。
InputStream\OutPutStream\Reader\Writer,不是接口,是4个抽象类
底层还是基于字节流操作,自动搜寻了指定的码表,从而按字符读取数据。
2 API
File:java虚拟机跟文件建立的联系,file不一定存在,可能是文件,可能是 文件夹,是一种抽象
3 path
名称分隔符 separator
建议使用 "/"(D:/test/1.png";)或者常量拼接(path="D:"+File.separator+"test"+File.separator+"1.png";)
绝对路径:存在盘符
相对路径:不存在盘符,相对于当前目录,user.dir
System.out.println(System.getProperty("user.dir"));
src=new File("IO.png");
System.out.println(src.getAbsolutePath());
输出:E:\eclipse-workspace\IO学习
E:\eclipse-workspace\IO学习\IO.png
4 InputStream 的基本方法
int read() throws IOException//读取一个字节并以证书的形式返回,如果返回-1已到输入流的末尾
int read(byte[] buffer) throws IOException//读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
int read(byte[] buffer,int offset,int length) throws IOException //读取length个字节,并存储到一个字节数组buffer中去,从offset位置开始,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
void close()throws IOException//关闭流释放内存资源
5 OutStream的基本方法
void write(int b) //向输出流中写入一个字节数据,该字节数据为参数b的低8位
void write(byte[ ] b)//将一个字节类型的数组中的数据写入输出流
void write(byte[]b ,int off,int len)//将一个字节类型的数组中的从指定位置off开始的len个字节写入到输出流
void close()//关闭流,释放内存资源
void flush()//将输出流中缓冲的数据全部写出到目的地
注:写数据时候,比如你在内存中已经装满桶了要写入文件中,结果close()切断了管道,剩下的半桶水已经没机会写入文件了,故一个良好的编程习惯:在你close()之前先调用下flush()。
6 Reader
继承自Reader的流都是用于向程序中输入数据,且数据的单位是字符
基本方法:
int read(): 读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode值)。如果未读出字符则返回-1(返回值为-1表示读取结束)。
void close() : 关闭流对象,释放相关系统资源。
7 Writer
继承自Wirter的流都是用于从程序中输出数据,且数据的单位为字符(16bit)
void write(int n)//向输出流中写入一个字符,该字节数据为参数n的低16位。
void write(char[] buf) //将一个字符类型的数组中的数据写入输出流
void write(char[] cbuf,int offset,int length)//将一个字符类型的数组中的从指定位置(offset)开始的length个字符写入到输出流
void write(String string)//将一个字符串中的字符写入到输出流
void write(String string,int offset,int length)//将一个字符串从offset开始的length个字符写入到输出流
注:String类有一个方法toCharArray(),可以把自己转换成一个字符数组,这里的write其实也是调用了这个
void close()//关闭输出流对象,释放相关系统资源。
void flush()
8 节点流
9 处理流
包在别的流上的流
(1)缓冲流
(带缓冲区的),显著的减少对IO读写的次数,保护硬盘,对读写的数据提供了缓存的功能。
BufferedReader/BufferedWriter增加了缓存机制,大大提高了读写文本文件的效率,同时,提供了更方便的按行读取的方法:readLine(); 处理文本时,我们一般可以使用缓冲字符流。
FIleInputStream fis=new FileInputStream("d:/share/java/hello.java");
BufferedInputStream bis=new BufferedInputStream(fis);
FileInputStream 没有缓冲的功能,把fis套在bis的里面,增加了带缓冲区的功能。
BufferedWirter bw=new BufferedWriter(new FileWriter(" "));
BufferedReader br=new BufferedReader(new FileReader(" ));
(2)转换流
InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流。
2 网络编程
1 网络编程!=网站编程(jsp、..severlet.)
网站编程构建在网络编程之上,网络编程更底层一些。
网络编程写服务器,网站编程在服务器上写应用。
---------计算机网络复习
《TCP/IP详解》
-网络通信协议和接口(两个结点之间进行对话的接口)
-通信协议分层
Java也有分层的思想,虚拟机把底层的差异屏蔽。
2 socket
Java为了可移植性,不允许直接调用操作系统,而是由java.net包来提供网络功能。Java虚拟机负责提供与操作系统的实际连接。
--两个java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的 一端 称为一个socket。
--socket通常用来实现client-socket连接
--java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client端和server端,TCP的client端:Socket,TCP的Server端:ServerSocket。
--建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)
(端口号区分应用程序,1024以下的不要占,系统可能随时征用,一般可以指定8000以上的)
80-HTTP 25-SMTP 110-POP3 8080-tomcat 1521-oracle 3306-mysql
查看所有端口:netstat-ano
查看指定端口:netstat -aon|sindstr "5355" (会看到进程号,找到对应的进程)
查看指定进程对应的程序 tasklist|findstr "2676" 这样就可以取任务管理器查看PID了
(如果端口冲突可以用上述方法查看)
TCP端口/UDP端口 ,各有65536个,同一个协议端口不可以冲突,不同协议可以冲突,但是不建议冲突。
3 URL
区分互联网上的资源。
组成:协议+域名、计算机+端口(默认80)+?请求资源+#锚点
URI(统一资源标识符)=URL(统一资源定位符,不仅标识还可以定位,一种定位资源的主要访问机制的字符串)+URN(统一资源名称,通过特定命名空间种的唯一名称或者id来标识资源)
锚点:用于同一个网站或同一个页面的跳转
超链接:同一个网站或者不同的网站都可以跳转
4 B/S C/S
(1)B/S 交流通过协议标准如HTTP,C/S直接自己定格式 协议。
(2)B/S只关注一端,C/S两端都需要关注
5 InetAdress
一个静态工具类,Java封装IP地址。
6 爬虫
1 获取URL
2 根据URL下载资源
3 分析资源-正则表达式
4 数据抽取,数据清洗,数据存储.....