2015-09-07 85 views
3

我做了一個擴展InputStream的新類,並且有@Override read()。 我想使用方法read(int b),但是當我使用它時,它會轉到方法 read(),我不能使用參數,我通過了。inputStream擴展InputStream的新類

這是我的代碼:

public class Run { 

    public static void main(String[] args) { 

     DFSMaze3dGenerator mg = new DFSMaze3dGenerator(); 
     try { 
      Maze3d maze3d = mg.generate(1, 5, 5); 
      maze3d.print3DMaze(); 
      OutputStream out = new MyCompressorOutputStream(
        new FileOutputStream("1.maz")); 
      out.write(maze3d.toByteArray()); 
      byte[] arr = maze3d.toByteArray(); 
      System.out.println(""); 
      for (int i = 0; i < arr.length; i++) { 
       System.out.print(arr[i] + ","); 
      } 
      out.close(); 
      InputStream in = new MyDecompressorInputStream(new FileInputStream(
        "1.maz")); 
      byte b[] = new byte[maze3d.toByteArray().length]; 
      in.read(b); 
      in.close(); 
      Maze3d loaded = new Maze3d(b); 
      System.out.println(loaded.equals(maze3d)); 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

我怎樣才能使用該參數時,我使用的方法:讀取(b)中; ???

public class MyDecompressorInputStream extends InputStream { 

    InputStream in; 
    int count; 
    boolean even = false; 

    public MyDecompressorInputStream(InputStream in) { 
     super(); 
     this.in = in; 
    } 

    @Override 
    public int read() throws IOException { 

     return 100; 

    } 



} 
+0

也許你應該重寫'讀(字節[])'? http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte []) –

+0

我做了它仍然去的方法read() –

回答

3

是否有你需要繼承InputStream的原因?您的主代碼中沒有任何代碼在您的實施中利用任何添加的代碼。但是,你應該在你的實現中實現read(byte [])。這是一個類似的實現,可以在我的機器上運行。

class MyInputStream extends InputStream { 
    InputStream in; 
    int count; 
    boolean even = false; 

    public MyInputStream(InputStream stream){ 
     this.in = stream; 
    } 

    @Override 
    public int read() throws IOException { 
     return this.in.read(); 
    } 

    @Override 
    public int read(byte[] toStore) throws IOException { 
     return this.in.read(toStore); 
    } 
} 

,我的主要用途此類似:

public static void main(String[] args){ 
    MyInputStream stream = new MyInputStream(new ByteArrayInputStream(new byte[] {0, 0, 1})); 
    byte[] storage = new byte[3]; 
    try { 
     stream.read(storage); 
     for (int i = 0; i < storage.length; ++i){ 
      System.out.println(storage[i]); //0 0 1 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    stream.close() 

} 
+0

我有MyCompressorOutputStream類壓縮,我需要MyDecompressorInputStream類來解壓縮算法 –

+0

這很好。您仍然應該添加重寫的讀取(byte [])。現在,儘管父對象擁有方法,但對象並不知道如何處理read(byte [])。 –

+0

您可以將我們的代碼與讀取(字節)覆蓋連接起來嗎? –

0

InputStream.read(byte[])電話(MyDecompressorInputStream.read()

而且你可能已經代表in

@Override 
public int read() throws IOException { 
    return in.read(); 
} 

@Override 
public void close() throws IOException { 
    return in.close(); 
} 

您可能要延長,而不是FilterInputStream

通常對於壓縮GzipInputStream很好(.gz格式)。

+0

它的東西拼貼和它應該是特定的InputStream –

+0

不錯,像InputStream的基本類進行了調查。使用調試器跟蹤,首先在IDE中添加JDK的源代碼(src.zip)。 –