热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaInputStream文件读写网络UDP/TCP

2019独角兽企业重金招聘Python工程师标准javaio流传输操作字节流和字符流的区别:读写单位不同:字节流以字节(8bit&#

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

java io流 传输操作

201332_llB1_274829.gif 

字节流和字符流的区别:

读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,字符流就是 : 字节流+编码表。

处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

纯文本数据优先考虑字符流 别的 字节流

常用    字节流:

FileInputStream                 //字符流读文件

FileOutputStream              //字符流写文件

BufferedInputStream         //带缓冲区的 读文件

BufferedOutputStream       //带缓冲区    写文件

字符流:

Writer Reader

FileReader                //文件读

FileWriter                //文件写

BufferedReader        //缓存读操作

BufferedWriter         //缓存写操作

创建一个可以往文件中写入字符数据的字符输出流对象,如果文件不存在,则会自动创建。如果文件存在,则会被覆盖。

因为不同系统换行符号不同所以,可以调用系统函数获得换行符号,便于不同系统移植

private static final String LINE_SEPARATOR = System.getProperty("line.separator");  //换行符

FileWriter fw = new FileWriter("demo.txt",true);  //创建一个文件
fw.write("abcde"+LINE_SEPARATOR+"hahaha");        //数据写入到临时存储缓冲区中。
fw.flush();                                       //数据缓冲区刷到文件中
fw.close();                                       //这个其实会自动调用 flush;上面那样写 可以实时保存

读文件 单个字符模式

FileReader fr = new FileReader("demo.txt");      //打开要读的文件
int ch = 0;
while((ch=fr.read())!=-1){                       //文件结束符 为 -1 ,获得单个字符System.out.println((char)ch);                
}
fr.close();

单个字符读,操作次数多,浪费资源,于是出现多个字符缓冲区方式读取

FileReader fr = new FileReader("demo.txt");
char[] buf = new char[1024];                  //一次读取 1024字节
int len = 0;
while((len=fr.read(buf))!=-1){System.out.println(new String(buf,0,len));
}
fr.close();

一个文件读取写入另一个文件  规范的写法 考虑抛异常

FileReader fr = null;
FileWriter fw = null;
try {fr = new FileReader("a.txt");fw = new FileWriter("b.txt");char[] buf = new char[BUFFER_SIZE];//缓冲区。 int len = 0;while((len=fr.read(buf))!=-1){fw.write(buf, 0, len);}} catch (Exception e) {throw new RuntimeException("读写失败");
}finally{if(fw!=null)  //证明打开的文件不为空try {fw.close();} catch (IOException e) {e.printStackTrace();}if(fr!=null)try {fr.close();} catch (IOException e) {e.printStackTrace();}
}

java本身带了缓存对象,可以直接调用  文件打开 操作

FileWriter fw = new FileWriter("buf.txt");
BufferedWriter bufw = new BufferedWriter(fw);    //
String line = null;
while((line=bufr.readLine())!=null){          //一次 读一行System.out.println(line);
}FileWriter fw = new FileWriter("buf.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("abcdef"+x);
bufw.newLine();
bufw.flush();
bufw.close();                           //关闭缓冲区 防止内存泄露  这个不需要关闭 文件

字节流例子

FileInputStream fis = new FileInputStream("bytedemo.txt");
byte[] buf = new byte[1024];
int len = 0;while((len=fis.read(buf))!=-1){                    //文件没结束System.out.println(new String(buf,0,len));
}FileOutputStream fos = new FileOutputStream("bytedemo.txt");fos.write("abcdefg".getBytes());          //文件中写入数据
//fos.flush();
fos.close();//关闭资源动作要完成。

拷贝一首MP3文件

FileInputStream fis = new FileInputStream("c:\\0.mp3");
BufferedInputStream bufis = new BufferedInputStream(fis);      //缓冲区方式FileOutputStream fos = new FileOutputStream("c:\\2.mp3");
BufferedOutputStream bufos = new BufferedOutputStream(fos);int ch = 0;
while((ch=bufis.read())!=-1){bufos.write(ch);
}bufos.close();                //关闭缓存区
bufis.close();

字符/字节流直接的转换   InputStreamReader、OutputStreamWriter

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));    字节流到字符流

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));

字符流道字节流  转换桥


java网络通信 UDP函数

DatagramSocket ds = new DatagramSocket(10000);         //UDP 绑定端口while(true){byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);       //UDP包对象ds.receive(dp);//阻塞式的。//4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。String ip = dp.getAddress().getHostAddress();int port = dp.getPort();String text = new String(dp.getData(),0,dp.getLength());    //数据System.out.println(ip+":"+port+":"+text);
}ds.close();

UDPsend

DatagramSocket ds = new DatagramSocket();           BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;while((line=bufr.readLine())!=null){byte[] buf = line.getBytes();   DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);  //udp发送包ds.send(dp);    if("886".equals(line))break;
}ds.close();


TCP通信对象  客户端

Socket socket = new Socket("192.168.1.100",10002);          //服务器IP 端口OutputStream out = socket.getOutputStream();  //输出的信息
out.write("tcp 输出".getBytes());InputStream in = socket.getInputStream();        //接收到的信息
byte[] buf = new byte[1024];int len = in.read(buf);String  text = new String(buf,0,len);System.out.println(text);                socket.close();

服务器端

ServerSocket ss = new ServerSocket(10002);Socket s = ss.accept();                             //获得客户端对象String ip = s.getInetAddress().getHostAddress();   //获得客户端IPInputStream in = s.getInputStream();    //接收到的客户端数据
byte[] buf = new byte[1024];int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(ip+":"+text);OutputStream out = s.getOutputStream();   //发送到客户端数据
out.write("收到".getBytes());s.close();
ss.close();



转:https://my.oschina.net/u/274829/blog/313874



推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • 不确定性|放入_华为机试题 HJ9提取不重复的整数
    不确定性|放入_华为机试题 HJ9提取不重复的整数 ... [详细]
  • 在软件开发过程中,MD5加密是一种常见的数据保护手段。本文将详细介绍如何在C#中使用两种不同的方式来实现MD5加密:字符串加密和流加密。 ... [详细]
  • 本文探讨了在C++中如何有效地清空输入缓冲区,确保程序只处理最近的输入并丢弃多余的输入。我们将介绍一种不阻塞的方法,并提供一个具体的实现方案。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 树链问题的优化解法:深度优先搜索与质因数分解
    本文介绍了一种通过深度优先搜索(DFS)和质因数分解来解决最长树链问题的方法。我们通过枚举树链上的最大公约数(GCD),将所有节点按其质因子分类,并计算每个类别的最长链,最终求得全局最长链。 ... [详细]
author-avatar
翟志军2502905177
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有