zoukankan      html  css  js  c++  java
  • Java 中有几种类型的流?

    字节流和字符流。字节流继承于 InputStream、OutputStream,字符流继承于Reader、Writer。

    在 java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。

    关于 Java 的 I/O 需要注意的有两点:一是两种对称性(输入和输出的对称性,字节和字符的对称性);二是两种设计模式(适配器模式和装潢模式)。

    另外 Java 中的流不同于 C#的是它只有一个维度一个方向。

    编程实现文件拷贝。

    (这个题目在笔试的时候经常出现,下面的代码给出了两种实现方案)

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.nio.ByteBuffer;

    import java.nio.channels.FileChannel;

    public final class MyUtil {

    private MyUtil() {

    throw new AssertionError();

    }

    public static void fileCopy(String source, String target) throws

    IOException {

    try (InputStream in = new FileInputStream(source)) {

    try (OutputStream out = new FileOutputStream(target)) {

    byte[] buffer = new byte[4096];

    int bytesToRead;

    while((bytesToRead = in.read(buffer)) != -1) {

    out.write(buffer, 0, bytesToRead);

    }

    }

    }

    }

    public static void fileCopyNIO(String source, String target) throws

    IOException {

    try (FileInputStream in = new FileInputStream(source)) {

    try (FileOutputStream out = new FileOutputStream(target)) {

    FileChannel inChannel = in.getChannel();

    FileChannel outChannel = out.getChannel();

    ByteBuffer buffer = ByteBuffer.allocate(4096);

    while(inChannel.read(buffer) != -1) {

    buffer.flip();

    outChannel.write(buffer);

    buffer.clear();

    }

    }

    }

    }

    }

    注意:上面用到 Java 7 的 TWR,使用 TWR 后可以不用在 finally 中释放外部资源 ,

    从而让代码更加优雅。

  • 相关阅读:
    iOS开发中多线程断点下载大文件
    iOS开发中的压缩以及解压
    iOS中大文件下载(单线程下载)
    NSURLConnection的GetPost方法
    自定义NSOperation下载图片
    NSOperation和NSOperationQueue的一些基本操作
    虚函数、继承
    new、delete、以及queue类
    new、delete、以及queue类
    在构造函数中使用new时的注意事项
  • 原文地址:https://www.cnblogs.com/programb/p/13021442.html
Copyright © 2011-2022 走看看