Io汇总(三) outputStream 以及子类

OutputStream

public abstract class OutputStream implements Closeable, Flushable

这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。 

void close()    关闭此输出流并释放与此流相关联的任何系统资源。  
void flush()    刷新此输出流并强制任何缓冲的输出字节被写出。  
void write(byte[] b)    将 b.length字节从指定的字节数组写入此输出流。  
void write(byte[] b, int off, int len)    从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。  
abstract void write(int b)    将指定的字节写入此输出流。  

 write(byte b[], int off, int len)

public void write(byte b[], int off, int len) throws IOException {
        ... 检查数据

        for (int i = 0 ; i < len ; i++) 
            write(b[off + i]);
    }

public abstract void write(int b) throws IOException;

flush()  close()

 public void flush() throws IOException {
  
  }

public void close() throws IOException {
   
 }

FileOutputStream

class FileOutputStream extends OutputStream

文件输出流是用于将数据写入到输出流File或一个FileDescriptor 

write(int b)

public void write(int b) throws IOException {
        write(new byte[] { (byte) b }, 0, 1);
    }

write(byte b[], int off, int len)

 public void write(byte b[], int off, int len) throws IOException {
        if (closed && len > 0) {
            throw new IOException("Stream Closed");
        }
        tracker.trackIo(len);
        IoBridge.write(fd, b, off, len); //根据不同系统写入
    }

FilterOutputStream

class FilterOutputStream extends OutputStream

这个类是过滤输出流的所有类的超类。 所有方法都是调用实现类out类的方法

 protected OutputStream out;

 public FilterOutputStream(OutputStream out) {
        this.out = out;
    }

 public void write(int b) throws IOException {
        out.write(b);
    }

.....

BufferedOutputStream  

class BufferedOutputStream extends FilterOutputStream

该类实现缓冲输出流

protected byte[] buf   存储数据的内部缓冲区。  
protected int count     缓冲区中有效字节的数量。 

synchronized void write(int b)

public synchronized void write(int b) throws IOException {
        if (count >= buf.length) {
            flushBuffer();  //
        }
        buf[count++] = (byte)b;
    }

flushBuffer()

private void flushBuffer() throws IOException {
        if (count > 0) {
            out.write(buf, 0, count);
            count = 0;
        }
    }

synchronized void write(byte b[], int off, int len)

public synchronized void write(byte b[], int off, int len) throws IOException {
        if (len >= buf.length) { // 要写入数据的字节数组的长度大于缓存的字节数组长度
            flushBuffer();// 把当前缓存的写入
            out.write(b, off, len);//写入缓存的数据
            return;
        }
        if (len > buf.length - count) { // 写出数据长度大于缓存的剩余长度
            flushBuffer(); //把当前缓存的写入
        }
        System.arraycopy(b, off, buf, count, len);//把要写入的拷贝到缓存数组中
        count += len; 
    }


ByteArrayOutputStream

public class ByteArrayOutputStream extends OutputStream

该类实现了将数据写入字节数组的输出流。

protected byte[] buf  存储数据的缓冲区。  
protected int count  缓冲区中有效字节的数量。  

synchronized void write(int b)

 public synchronized void write(int b) {
        ensureCapacity(count + 1);
        buf[count] = (byte) b;
        count += 1;
    }

synchronized void write(byte b[], int off, int len)

 public synchronized void write(byte b[], int off, int len) {
         ... 检查数据
        ensureCapacity(count + len);
        System.arraycopy(b, off, buf, count, len);
        count += len;
    }

synchronized void writeTo(OutputStream out)   把该流中的数据通过该out写出

public synchronized void writeTo(OutputStream out) throws IOException {
        out.write(buf, 0, count); //
    }

synchronized byte toByteArray()[]

  public synchronized byte toByteArray()[] {
        return Arrays.copyOf(buf, count);
    }

 DataOutputStream

class DataOutputStream extends FilterOutputStream implements DataOutput

 数据输出流使应用程序以便携式方式将原始Java数据类型写入输出流

protected int written   到目前为止写入数据输出流的字节数。 

void writeBoolean(boolean v) 将 boolean写入底层输出流作为1字节值。  
void writeByte(int v) 将 byte作为1字节值写入底层输出流。  
void writeBytes(String s) 将字符串作为字节序列写入基础输出流。  
void writeChar(int v) 将 char写入底层输出流作为2字节值,高字节优先。  
void writeChars(String s) 将字符串写入底层输出流作为一系列字符。  
void writeDouble(double v) 双参数传递给转换 long使用 doubleToLongBits方法在类 Double ,然后写入该 long值基础输出流作为8字节的数量,高字节。  
void writeFloat(float v) 浮子参数的转换 int使用 floatToIntBits方法在类 Float ,然后写入该 int值基础输出流作为一个4字节的数量,高字节。  
void writeInt(int v) 将底层输出流写入 int作为四字节,高位字节。  
void writeLong(long v) 将 long写入底层输出流,为8字节,高字节为首。  
void writeShort(int v) 将 short写入底层输出流作为两个字节,高字节优先。  
void writeUTF(String str) 使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流。  

synchronized void write(int b)

 public synchronized void write(int b) throws IOException {
        out.write(b);
        incCount(1);
    }

synchronized void write(byte b[], int off, int len)

public synchronized void write(byte b[], int off, int len)
        throws IOException
    {
        out.write(b, off, len);
        incCount(len);
    }

final void writeInt(int v)

public final void writeInt(int v) throws IOException {
        out.write((v >>> 24) & 0xFF);
        out.write((v >>> 16) & 0xFF);
        out.write((v >>>  8) & 0xFF);
        out.write((v >>>  0) & 0xFF);
        incCount(4);
    }

 void incCount(int value)

 private void incCount(int value) {
        int temp = written + value;
        if (temp < 0) {
            temp = Integer.MAX_VALUE;
        }
        written = temp;
    }

final void writeBoolean(boolean v)

 public final void writeBoolean(boolean v) throws IOException {
        out.write(v ? 1 : 0);
        incCount(1);
    }

 

你可能感兴趣的:(java基础)