本帖最后由 小石姐姐 于 2018-10-11 16:44 编辑
字节流可以读取byte类型的文件,读取出来的是字节
字符流只能读取文本文件,读取出来是char类型,当读取汉字时,可以直接读取一个 汉字
[Java] 纯文本查看 复制代码 → InputStream 字节输入流
→ FileInputStream 专门操作文件的字节输入流
→ BufferedInputStream 带有缓冲区的字节输入流, 效率高
→ ObjectInputStream 对象输入流
OutputStream 字节输出流 → FileOutputStream 专门操作文件的字节输出流
→ BufferedOutputStream 带有缓冲区的字节输出流, 效率高
→ ObjectOuptStream 对象输出流
→ PrintStream 字节打印流
[Java] 纯文本查看 复制代码 Reader字符输入流 → BufferedReader 带有缓冲区的字符输入流,效率高
→ InputStreramReader 将字节流转换为字符流输入的转换输入流
→ FileReader 专门操作文件的字符输入流
Writer 字符输出流 → BufferedWriter 带有缓冲区的字符输出流,效率高
→ InputStreamReader 将字符流转换为字节流输出的转换输出流
→ FileWriter 专门操作文件的字符输出流
➷void close(): 释放资源
➷int read(): 一次读一个字节. 读到文件末尾返回-1 (返回int也是为了代码编写方便)
➷int read(byte[]?b): 一次读一个字节数组. 读到的字节存放在参数中的字节数组中, 返回int值是本次读到的字节的个数. 读到文件末尾返回-1
➷FileInputStream(String name): 使用文件路径创建文件字节输入流
➷FileInputStream(File file)使用File文件路径,创建对象
➷BufferedInputStream(InputStream in, int size): 使用基本流创建一个缓冲字节输入流, 设置缓冲区大小 ⊱参数1:可以传FileInputStream 参数2:表示缓冲区大小,不写则是另一个构造方法
➷ObjectInputStream(InputStream in)⊱传FileInputStream
➷特有方法:readObject从文件中以字节的形式读取对象
➹int writer():一次写一个字节,读到末尾返回-1
➹int writer(byte[] byte):一次读一个字节数组
➹FileOutputStream(String name):同FileInputStream
➹FileOutputStream(File file):同FileInputStream
➹FileOutputStream(File file,boolean true)
➹FileOutputStream(String name,boolean true)
➹BufferedOutputStream(OutputStream out,int size):使用基本流创建一个字节输出缓 存流,设置缓冲区大小 ⊱参数1:传FileOutputStream 参数2:缓冲区大小
➹特有方法:writerObject将对象以字节的形式保存到文件当中
➹PrintStream(File file):创建字节打印流,输出到一个文件
➹PrintStream(OutputStream out):创建字节打印流,输出到一个字节输出流
➹PrintStream(String fileNmae):创建字节打印流,输出到一个文件路径
♪System.setOut(PrintStream out):设置System.out的输出目的为参数的打印流
➷int read()
➷int read(Char[] char)
➷void close()
➷BUfferedReader(Reader in,int size):使用基本流创建一个字符缓冲流,可以传FileReader,size缓冲区大小
➷特有方法ReadLine()一次读一行字符串,不包含换行符
➷InputStreamReader(InputStream in,String charsetName):使用指定的编码码表创建转换流,参数:1. 传入自己输入流用来读取文件保存的字节2.指定的编码表名称,不指定默认为:UTF-8
➷FileReader(File file)
➷FileReader(String?fileName)
➹abstract void close()刷新缓冲区并释放资源
➹abstract void flush()
➹void write(int c):写入一个字符(int类型为了代码编写方便)
➹void write(char[] cbuf):写一个字符数组
➹abstract void write(char[] b,int off,int len)
➹void write(String str):写入一个字符串
➹void write(String str,int off,int len)
➹FileWriter(File file)
➹FileWrite(String fileName)
➹FileWrite(FIle file,boolean append)
➹FileWrite(String fileName,boolean append)
➹OutputStreamWriter(OutputStrem out):使用默认编码表创建转换流
➹OutputStreamWriter(OutputStream out,String charsetName)::charsetName-编码表名称
➹FileWriter(File file)
➹FileWriter(String fileName)
➹FileWriter(File file,boolean append)
➹FIleWriter(String fileName,boolean appedn)
windows:\r\n
Linux:\n
mac:\r
文件路径分割符:File.pathSeparator
File.pathSeparatorChar
文件名称分割符:File.separator
File.separatorChar
字符编码主要是GBK 一个字符占两个字节
UTF-8(系统默认) 一个字符占三个字节
[Java] 纯文本查看 复制代码 FileInputStream files=new FileInputStream("day20_code\\小岳岳.jpg");
FileOutputStream file = new FileOutputStream("day20_code\\假小岳岳.jpg");
byte[] byt = new byte[1024];
int len=0;
while ((len = files.read(byt)) != -1) {
file.write(byt,0,len);
}
BufferedReader bu=new BufferedReader(new InputStreamReader(InputStream));
- 在服务器和客户端通信时,出现阻塞状态的原因和解法☚
比如在客户端写入,在服务器写出
在客户端写,但是没有写-1,服务端写出循环中无法退出
在客户端写命令下,写对象.shutdownOutput关闭写,并写入-1
✘NotSerializableException没有序列化异常
类通过实现java.io.Serializable接口以启用其序列化。未实现接口的类将无法使用任 何状态的序列化和反序列化
✘改变原class文件中成员变量后出现InvalidClassException异常
private static final long serialVersionUID=12
♣静态不能被序列化,序列化后的都是对象
♣ transient瞬态也不能被序列化
∷void load(InputStream inst)读取保存在文件上的键值对
∷void load(Reader reader)
∷void store(OutputStream out,String comments)comments注释,用来解释说明保存的文件是做什么用的,不能使用中文会乱码
∷void store(Writer writer,String comments)把临时数据,持久化写入到硬盘中存储
∷Object setProperty(String key,String value)调用Hashtable的方法put
∷String getProperties(String key)通过key找vaule,此方法相当于map集合中get(Key)
∷set<String> StringPropertNames()返回属性列表中键集,其中该键及其对应的值都是字符串,此方法与map集合中keySet方法相同
[Java] 纯文本查看 复制代码 Properties p = new Properties();
FileReader file=null;
try {
file= new FileReader("day20_code\\prop.properties");
p.load(file);
Set<String> strings=p.stringPropertyNames();
for(String key:strings){
String value = p.getProperty(key);
System.out.println(key+"="+value);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (file != null) {
try {
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- JDK7、JDK9TryCatch:
- try(定义流对象,定义流对象.....){}catch(){}
- A a=new A();
B b=new B();
try(a,b){}catch(){}
127.0.0.1或localhost
是一个逻辑接口,我们无法直接看到,可以使用一些软件查看端口号
当我们使用网络软件已打开,那么操作系统会为网络软件分配一个随机的端口号
或者网路软件在打开的时候和系统要指定的端口号
端口号是又两个字节组成,取值范围在0-65535之间 0-1024不建议使用
UDP:
1.无连接的不可靠协议
2.以包发送,64k一个包
3.速度快效率高,容易丢包
TCP:
1.有连接的可靠协议
2.传输数据没有大小限制
3.速度慢效率低,安全性高
拼接的文件名, 改为: 域名+毫秒值+随机数 的方式
1.getOutputStream()获取网络字节输出流OutputStreram对象
2.getInputStream()获取网络字节输入流对象
1.accept()获取到请求的客户端对象
|