Java复习笔记-IO / 网络编程

随便记录 比较凌乱

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 数据抽取,数据清洗,数据存储.....

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值