概述:

1、input和output是相对于内存而言的。输入(input)就是写入到内存里,输出(output)就是把内存里的东西写到外面。

2、操作内存里的东西非常便利,要么声明变量,要么new对象,而对于内存外的东西就没那么方便了。

3、写入写出(io流)骨子里一定要清楚的“三步操作”:a、定位。从哪里input(哪个文件、哪个端口)、output到哪里(端口or文件or数据库...)。b、建立管道。c、操作管道。

例如,向端口8000写东西,首先需要知道是往端口8000output,其次需要建立从端口8000到内存的input管道,最后,需要读多少数据呢?以什么形式读呢?叫做操作管道。

4、需要注意的是:1所有离开内存的操作都是有风险的,一定要用try catch保护风险代码。2用指针理解stream的概念,例如,每read一次指针就往沿着文本往下移动,前面的数据就“流走”了。

补充:

1、java byte类型,8位二进制为一个字节,一个英文字母占1byte,一个汉字占2byte。

文件读写的read有多个重载函数,既可以一个字节一个字节的读,无参read();也可以多个字节的读到一个byte型数组中read(new byte[size]);

2、io流的加密偶尔会涉及到“数据的溢出”。

3、使用io流通常需要分段捕获各个类型的异常:filenotfound、ioexception...

4、一定要记住的:

a、最底层的、最基本io流方法是读写字节而不是字符:InputsStream...is.read()、is.read(byte[])

b、为了处理方便有了字符流:Reader....read(char[])

c、为了提高性能,例如一次读一行,就有了BufferReader等高级流,但是BufferReader是建立在基础reader之上的!

d、常常用PrintWriter代替BufferWriter,理由是增强在各个平台的兼容性。

e、再往上走就有专门读写object的流了。

f、不考虑性能的情况下,哪个方便就用哪一个。

g、无法通过socket直接获得字符流(文件可以直接获得),必须通过字节流--InputStreamReader-->字符流---->高级流

参考:

1、java io最详解:http://blog.csdn.net/yczz/article/details/38761237

2、 java 字节流与字符流的区别:http://blog.csdn.net/cynhafa/article/details/6882061

3、为什么一定要关闭流?:http://www.iteye.com/problems/25486 个人认为一个两个iosteam不关闭也没什么问题。。但是量一多就会出问题。。另外如果不调用close,flush()一定是要调用的。。这样才能确保“效果正确”。

4、Socket与ServerSocket:http://www.cnblogs.com/rond/p/3565113.html(有些东西可能不需要了解细节。。但是随手查查心里比较有底。。。)

参考代码:

ObjectOutputStream需要的参数是OutputStream,所以传入的参数只要是OutputStream或者OutputStream的子类都可以。。。

按照需要传入就可以了。

文件io:

package com.xkfx.io;

import com.xkfx.qq.tools.transmit.User;

import java.io.*;

public class FileIOTest {
public static void main(String[] args) {
ObjectOutputStream os = null;
ObjectInputStream is = null;
try {
// 定位与建立管道
os = new ObjectOutputStream(new FileOutputStream("d:/labs/test.txt"));
is = new ObjectInputStream(new FileInputStream("d:/labs/test.txt")); // 操作管道
os.writeObject(new User("xkfx", "a123456"));
User user = (User)is.readObject();// 读到的是Obj类对象,需要强制转换 System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

网络io:

server:

package com.xkfx.qq.server;

import com.xkfx.qq.tools.transmit.User;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Server {
public static void main(String[] args) throws IOException{
ServerSocket server = null;
server = new ServerSocket(8000); // 向操作系统注册服务
Socket socket = server.accept(); // 从连接队列中取出一个连接,如果没有则等待
ObjectInputStream is = null;
try {
is = new ObjectInputStream(socket.getInputStream());
User user = (User)is.readObject();
System.out.println(user);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

client:

package com.xkfx.io;

import com.xkfx.qq.tools.transmit.User;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket; public class SocketTest {
public static void main(String[] args) {
Socket socket = null;
ObjectOutputStream os = null;
try {
socket = new Socket("localhost", 8000); os = new ObjectOutputStream(socket.getOutputStream());
os.writeObject(new User("qjlsd", "a123456"));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

【Java】流与文件(端口 & 文件读写对象)的更多相关文章

  1. JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码

    JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...

  2. Java 流(Stream)、文件(File)和IO

    Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序 ...

  3. (转载)java基础:关于java流与文件操作

    原文摘自: http://www.blogjava.net/haizhige/archive/2008/08/03/219668.html 1.描述:流是字节数据或字符数据序列. Java采用输入流对 ...

  4. java I/O框架 (四)文件流

    文件读取 FileInputStream FileReader 文件写入 FileOutputStream FileWriter 随机文件读写 RandomAccessFile 一.文件读取 File ...

  5. Java - 17 Java 流(Stream)、文件(File)和IO

    Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型. ...

  6. Java编程的逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  7. java基础:关于java流与文件操作

    1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序 ...

  8. java 流 文件 IO

    Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...

  9. Java流和文件

    File类:java.io包下与平台无关的文件和目录 java可以使用文件路径字符串来创建File实例,文件路径可以是绝对路径,也可以是相对路径,默认情况下,相对路径是依据用户工作路径,通常就是运行J ...

  10. Java流(Stream)、文件(File)和IO

    Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列 ...

随机推荐

  1. 【vijos】1881 闪烁的繁星(线段树+特殊的技巧)

    https://vijos.org/p/1881 这场比赛太难了sad.所以我都没做.. 这题一开始我竟然不会sad(本来就不会),然后我继续yy..yy了好久,竟然yy了个什么可拆分的并查集?(sa ...

  2. Unity3D必备知识: 物理学公式

    一.质点的运动(1)——直线运动 1)匀变速直线运动 1.平均速度V=s/t(定义式) 2.有用推论Vt*Vt-Vo*Vo=2as 3.中间时刻速度Vt/2=V平=(Vt+Vo)/2 4.末速度Vt= ...

  3. CentOS安装Oracle官方JRE

    CentOS自带的JRE是OpenJDK,因为一些原因,需要换用Oracle官方出品的JRE. Oracle JRE下载地址http://java.com/zh_CN/(下载时注意选择相应版本) 可以 ...

  4. iOS开发之 -- 判断tableview/scrollview的滑动方法,及导航栏渐变的实现代码

    开发的过程中,肯定会用到在视图想上滑动的时候,在导航处做一些操作,比如向上滑动的时候,做个动画,出现一个搜索框,或者其他的操作,那么我们怎么来判断它的滑动方向呢? 首先我们应该知道tableview继 ...

  5. Android UI开发第三十六篇——使用Volley加载图片列表

    Android开发者可能会使用Universal Image Loader或者Square`s newer Picasso这些第三方的库去处理图片的加载,那么Volley是怎么加载图片列表的呢,这一篇 ...

  6. js获取上个月的第一天和最后一天

    var now = new Date(); var fd = new Date(now.getFullYear(), now.getMonth()-1 ,1).toLocaleDateString() ...

  7. 160708、JQuery解析XML数据的demo

    用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 方案1 当后台返回的数据类型是xml对象 ...

  8. pip install selenium==版本号 报错

    安装selenium是注意不要带版本号直接用如下命令: pip install selenium

  9. java反射——方法

    大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...

  10. Refused to execute script from '....js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.md

    目录 问题描述 解决过程 总结 问题描述 在整合 Spring Boot.Spring Security.Thymeleaf 的练习中,对页面进行调试时,发现如下错误提示: Refused to ex ...