当前位置: 首页 > news >正文

东莞技术好的网站建设阿里的6家外包公司名单

东莞技术好的网站建设,阿里的6家外包公司名单,网站建设维护合同书,ngrok做网站服务器IO体系 Java IO 体系种类繁多#xff0c;感觉很复杂#xff0c;但其实是 IO 涉及的因素太多了。在进行介绍的时候添加了设计模式等的使用#xff0c;会让你感觉更加难以理解难以使用这些IO类#xff0c;在此对java的IO做了一个详细的总结。 IO 类设计出来#xff0c;肯定…IO体系 Java IO 体系种类繁多感觉很复杂但其实是 IO 涉及的因素太多了。在进行介绍的时候添加了设计模式等的使用会让你感觉更加难以理解难以使用这些IO类在此对java的IO做了一个详细的总结。 IO 类设计出来肯定是为了解决 IO 相关的操作的想一想哪里会有 IO 操作网络、磁盘。网络操作相关的类是在 java.net 包下不在本文的总结范围内。提到磁盘你可能会想到文件文件操作在 IO 中是比较典型的操作。在 Java 中引入了 “流” 的概念它表示任何有能力产生数据源或有能力接收数据源的对象。数据源可以想象成水源海水、河水、湖水、一杯水等等。数据传输可以想象为水的运输古代有用桶运水用竹管运水的现在有钢管运水不同的运输方式对应不同的运输特性。 从数据来源或者说是操作对象角度看IO 类可以分为 1、文件fileFileInputStream、FileOutputStream、FileReader、FileWriter 2、数组[] 2.1、字节数组byte[]ByteArrayInputStream、ByteArrayOutputStream2.2、字符数组char[]CharArrayReader、CharArrayWriter3、管道操作PipedInputStream、PipedOutputStream、PipedReader、PipedWriter 4、基本数据类型DataInputStream、DataOutputStream 5、缓冲操作BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter 6、打印PrintStream、PrintWriter 7、对象序列化反序列化ObjectInputStream、ObjectOutputStream 8、转换InputStreamReader、OutputStreWriter 数据源节点也可以再进行二次处理使数据更加容易使用所以还可以划分成节点流和处理流涉及到设计模式的使用。 从数据传输方式或者说是运输方式角度看可以将 IO 类分为 1、字节流 2、字符流 字节流是以一个字节单位来运输的比如一杯一杯的取水。而字符流是以多个字节来运输的比如一桶一桶的取水一桶水又可以分为几杯水。 字节流和字符流的区别 字节流读取单个字节字符流读取单个字符一个字符根据编码的不同对应的字节也不同如 UTF-8 编码是 3 个字节中文编码是 2 个字节。字节流用来处理二进制文件图片、MP3、视频文件字符流用来处理文本文件可以看做是特殊的二进制文件使用了某种编码人可以阅读。简而言之字节是个计算机看的字符才是给人看的。 字节流和字符流的划分可以看下面这张图。 不可否认Java IO 相关的类确实很多但我们并不是所有的类都会用到我们常用的也就是文件相关的几个类如文件最基本的读写类 File 开头的、文件读写带缓冲区的类 Buffered 开头的类对象序列化反序列化相关的类 Object 开头的类。 IO类和相关方法 IO 类虽然很多但最基本的是 4 个抽象类InputStream、OutputStream、Reader、Writer。最基本的方法也就是一个读 read() 方法、一个写 write() 方法。方法具体的实现还是要看继承这 4 个抽象类的子类毕竟我们平时使用的也是子类对象。这些类中的一些方法都是Native本地方法、所以并没有 Java 源代码下面我对这些常用类进行了总结。 先来看 InputStream 和 OutStream 中的方法简介因为都是抽象类、大都是抽象方法、所以就不贴源码喽注意这里的读取和写入其实就是获取输入数据和输出数据。 InputStream 类 读取数据 public abstract int read()将读取到的数据放在 byte 数组中该方法实际上是根据下面的方法实现的off 为 0len 为数组的长度 public int read(byte b[])从第 off 位置读取 len 长度字节的数据放到 byte 数组中流是以 -1 来判断是否读取结束的注意这里读取的虽然是一个字节但是返回的却是 int 类型 4 个字节 public int read(byte b[], int off, int len)跳过指定个数的字节不读取想想看电影跳过片头片尾 public long skip(long n)返回可读的字节数量 public int available()读取完关闭流释放资源 public void close()标记读取位置下次还可以从这里开始读取使用前要看当前流是否支持可以使用 markSupport() 方法判断 public synchronized void mark(int readlimit)重置读取位置为上次 mark 标记的位置 public synchronized void reset()判断当前流是否支持标记流和上面两个方法配套使用 public boolean markSupported()OutputStream 类 写入一个字节可以看到这里的参数是一个 int 类型对应上面的读方法int 类型的 32 位只有低 8 位才写入高 24 位将舍弃。 public abstract void write(int b)将数组中的所有字节写入和上面对应的 read() 方法类似实际调用的也是下面的方法。 public void write(byte b[])将 byte 数组从 off 位置开始len 长度的字节写入 public void write(byte b[], int off, int len)强制刷新将缓冲中的数据写入 public void flush()关闭输出流流被关闭后就不能再输出数据了 public void close()再来看 Reader 和 Writer 类中的方法你会发现和上面两个抽象基类中的方法很像。 Reader 类 读取字节到字符缓存中 public int read(java.nio.CharBuffer target)读取单个字符 public int read()读取字符到指定的 char 数组中 public int read(char cbuf[])从 off 位置读取 len 长度的字符到 char 数组中 abstract public int read(char cbuf[], int off, int len)跳过指定长度的字符数量 public long skip(long n)和上面的 available() 方法类似 public boolean ready()判断当前流是否支持标记流 public boolean markSupported()标记读取位置下次还可以从这里开始读取使用前要看当前流是否支持可以使用 markSupport() 方法判断 public void mark(int readAheadLimit)重置读取位置为上次 mark 标记的位置 public void reset()关闭流释放相关资源 abstract public void close()Writer 类 写入一个字符 public void write(int c)写入一个字符数组 public void write(char cbuf[])从字符数组的 off 位置写入 len 数量的字符 abstract public void write(char cbuf[], int off, int len)写入一个字符串 public void write(String str)从字符串的 off 位置写入 len 数量的字符 public void write(String str, int off, int len)追加吸入一个字符序列 public Writer append(CharSequence csq)追加写入一个字符序列的一部分从 start 位置开始end 位置结束 public Writer append(CharSequence csq, int start, int end)追加写入一个 16 位的字符 public Writer append(char c)强制刷新将缓冲中的数据写入 abstract public void flush()关闭输出流流被关闭后就不能再输出数据了 abstract public void close()下面我们就直接使用他们的子类在使用中再介绍下面没有的新方法。 1、读取控制台中的输入 import java.io.*;public class IOTest {public static void main(String[] args) throws IOException {// 三个测试方法 // test01(); // test02();test03();}public static void test01() throws IOException {BufferedReader bufferedReader new BufferedReader(new InputStreamReader(System.in));System.out.println(请输入一个字符);char c;c (char) bufferedReader.read();System.out.println(你输入的字符为c);}public static void test02() throws IOException {BufferedReader bufferedReader new BufferedReader(new InputStreamReader(System.in));System.out.println(请输入一个字符按 q 键结束);char c;do {c (char) bufferedReader.read();System.out.println(你输入的字符为c);} while (c ! q);}public static void test03() throws IOException {BufferedReader bufferedReader new BufferedReader(new InputStreamReader(System.in));System.out.println(请输入一行字符);String str bufferedReader.readLine();System.out.println(你输入的字符为 str);} } 至于控制台的输出我们其实一直都在使用呢System.out.println() out 其实是 PrintStream 类对象的引用PrintStream 类中当然也有 write() 方法但是我们更常用 print() 方法和 println() 方法因为这两个方法可以输出的内容种类更多比如一个打印一个对象实际调用的对象的 toString() 方法。 2、二进制文件的写入和读取 注意这里文件的路径可以根据自己情况改一下虽然这里的文件后缀是txt但该文件却是一个二进制文件并不能直接查看。 Testpublic void test04() throws IOException {byte[] bytes {10,25,37,12,23};FileOutputStream fileOutputStream new FileOutputStream(new File().getAbsolutePath()/io/test.txt);// 写入二进制文件直接打开会出现乱码fileOutputStream.write(bytes);fileOutputStream.close();}Testpublic void test05() throws IOException {FileInputStream fileInputStream new FileInputStream(new File().getAbsolutePath()/io/test.txt);int c;// 读取写入的二进制文件输出字节数组while ((c fileInputStream.read()) ! -1) {System.out.print(c);}}3、文本文件的写入和读取 write() 方法和 append() 方法并不是像方法名那样一个是覆盖内容一个是追加内容append() 内部也是 write() 方法实现的也非说区别也就是 append() 方法可以直接写 null而 write() 方法需要把 null 当成一个字符串写入所以两者并无本质的区别。需要注意的是这里并没有指定文件编码可能会出现乱码的问题。 Testpublic void test06() throws IOException {FileWriter fileWriter new FileWriter(new File().getAbsolutePath()/io/test.txt);fileWriter.write(Helloworld\n欢迎进入Java IO\n);fileWriter.write(不会覆盖文件原本的内容\n); // fileWriter.write(null); 不能直接写入 nullfileWriter.append(并不是追加一行内容不要被方法名迷惑\n);fileWriter.append(null);fileWriter.flush();System.out.println(文件的默认编码为 fileWriter.getEncoding());fileWriter.close();}Testpublic void test07() throws IOException {FileWriter fileWriter new FileWriter(new File().getAbsolutePath()/io/test.txt, false); // 关闭追加模式变为覆盖模式fileWriter.write(Helloworld欢迎进入Java IO\n);fileWriter.write(我来覆盖文件原本的内容);fileWriter.append(我是下一行);fileWriter.flush();System.out.println(文件的默认编码为 fileWriter.getEncoding());fileWriter.close();}Testpublic void test08() throws IOException {FileReader fileReader new FileReader(new File().getAbsolutePath()/io/test.txt);BufferedReader bufferedReader new BufferedReader(fileReader);String str;while ((str bufferedReader.readLine()) ! null) {System.out.println(str);}fileReader.close();bufferedReader.close();}Testpublic void test09() throws IOException {FileReader fileReader new FileReader(new File().getAbsolutePath()/io/test.txt);int c;while ((c fileReader.read()) ! -1) {System.out.print((char) c);}} 使用字节流和字符流的转换类 InputStreamReader 和 OutputStreamWriter 可以指定文件的编码使用 Buffer 相关的类来读取文件的每一行。 Testpublic void test10() throws IOException {FileOutputStream fileOutputStream new FileOutputStream(new File().getAbsolutePath()/io/test2.txt);OutputStreamWriter outputStreamWriter new OutputStreamWriter(fileOutputStream, GBK); // 使用 GBK 编码文件outputStreamWriter.write(Helloworld\n欢迎进入Java IO\n);outputStreamWriter.append(另外一行内容);outputStreamWriter.flush();System.out.println(文件的编码为 outputStreamWriter.getEncoding());outputStreamWriter.close();fileOutputStream.close();}Testpublic void test11() throws IOException {FileInputStream fileInputStream new FileInputStream(new File().getAbsolutePath()/io/test2.txt);InputStreamReader inputStreamReader new InputStreamReader(fileInputStream, GBK); // 使用 GBK 解码文件BufferedReader bufferedReader new BufferedReader(inputStreamReader);String str;while ((str bufferedReader.readLine()) ! null) {System.out.println(str);}bufferedReader.close();inputStreamReader.close();} 4、复制文件 我进行了一些测试不使用缓冲对文件复制时间的影响文件的复制实质还是文件的读写。缓冲流是处理流是对节点流的装饰。 Testpublic void test12() throws IOException {// 输入和输出都使用缓冲流FileInputStream in new FileInputStream(D:\\我的资料\\大数据可视化\\大数据.mp4);BufferedInputStream inBuffer new BufferedInputStream(in);FileOutputStream out new FileOutputStream(大数据.mp4);BufferedOutputStream outBuffer new BufferedOutputStream(out);int len 0;byte[] bs new byte[1024];long begin System.currentTimeMillis();while ((len inBuffer.read(bs)) ! -1) {outBuffer.write(bs, 0, len);}System.out.println(复制文件所需的时间 (System.currentTimeMillis() - begin)); // 平均时间约 200 多毫秒inBuffer.close();in.close();outBuffer.close();out.close();}Testpublic void test13() throws IOException {// 只有输入使用缓冲流FileInputStream in new FileInputStream(D:\\我的资料\\大数据可视化\\大数据.mp4);BufferedInputStream inBuffer new BufferedInputStream(in);FileOutputStream out new FileOutputStream(大数据.mp4);int len 0;byte[] bs new byte[1024];long begin System.currentTimeMillis();while ((len inBuffer.read(bs)) ! -1) {out.write(bs, 0, len);}System.out.println(复制文件所需时间 (System.currentTimeMillis() - begin)); // 平均时间约 500 多毫秒inBuffer.close();in.close();out.close();}Testpublic void test14() throws IOException {// 输入和输出都不使用缓冲流FileInputStream in new FileInputStream(D:\\我的资料\\大数据可视化\\大数据.mp4);FileOutputStream out new FileOutputStream(大数据.mp4);int len 0;byte[] bs new byte[1024];long begin System.currentTimeMillis();while ((len in.read(bs)) ! -1) {out.write(bs, 0, len);}System.out.println(复制文件所需时间 (System.currentTimeMillis() - begin)); // 平均时间 700 多毫秒in.close();out.close();}Testpublic void test15() throws IOException {// 不使用缓冲FileInputStream in new FileInputStream(D:\\我的资料\\大数据可视化\\大数据.mp4);FileOutputStream out new FileOutputStream(大数据.mp4);int len 0;long begin System.currentTimeMillis();while ((len in.read()) ! -1) {out.write(len);}System.out.println(复制文件所需时间 (System.currentTimeMillis() - begin)); // 平均时间约 160000 毫秒约 2 分多钟in.close();out.close();} 结论Java IO 类很多但是把握住整个体系掌握关键的方法学习起来就会轻松很多看完这篇文章你是否觉得 Java IO 并没有你想的那么难呢
http://www.yutouwan.com/news/396286/

相关文章:

  • 公司设计网站建设自己怎么做一元购物网站
  • 可以做翻译兼职的网站工业设计网站知乎
  • 重庆潼南网站建设哪家便宜网站制作预付款会计分录
  • 网站是做百度快照推广好网站托管..
  • 如何创建网站下载漳州企业网站开发
  • f福州网站建设公司做哪个视频网站赚钱
  • 网站伪静态全站伪静态高校二级网站建设意义
  • 网站开发用啥语言免费企业邮箱登录
  • 做网站经费网页设计图片素材网
  • 企业网站设计的深圳公司第一次开票网站建设怎么开
  • 镇江个人网站建设中国建设银行信用卡官网站首页
  • 网站做好后还需要维护吗温州网站推广优化公司
  • 网站建设198wordpress 博客 点击 首页的文章标题都跳转到主页
  • 外贸网站推广建站东莞网页设计费用
  • 杭州九鸿科技网站开发山东建设监理协会官方网站
  • 网站推广方式有哪些如何注册网站怎么注册
  • 爱站网关键词查询工具医院网站建设方案ppt
  • 杭州桐庐网站建设职业技能培训有哪些
  • 商务网站开发需求分析安庆市建设银行网站
  • 俄语 俄文 俄罗斯语外贸网站建设腾冲市住房和城乡建设局网站
  • 网站虚拟主机是什么微网站手机制作
  • 网站域名查询网址wordpress做微信小程序
  • 购物网站成品怎样做网站分流赚钱
  • 网站营销网核工业华南建设工程集团公司网站
  • 做感恩网站的图片素材html在线记账网站模板
  • 网站设计遇到的问题wordpress 留言页面
  • 青海省高等级公路建设管局网站供需平台类网站建设
  • 某购物网站建设方案wordpress meta 排序
  • 企业网站源码html大连微信网站制作
  • 网站建设代码标准莆田网站开发公司