繁体   English   中英

扩展InputStream类时出现的问题

[英]issue while extending InputStream class

我正在尝试扩展InputStream类并使用自定义的read()方法。 这是我的班级快照:

class MyClass
{    
     /** Input stream */
     private final MyInputStream in = new MyInputStream();
     /**get the InputStream
     public InputStream getInputStream()
     {
         return in;
     }

     /** Inner class for MyInputStream */
     class MyInputStream extends InputStream
     {
         //here i am keeping implementation of read methods
         public synchronized int read( byte b[] ) throws IOException
         {
         //..................
         }
     }
 }

这是我的客户班

public class MyClient {
     //InStreams
     protected BufferedInputStream mBufInStream;
     protected DataInputStream mInStream;

     public int read(byte[] buffer)
     {
           MyClass obj1 =  new MyClass();
           mBufInStream = new BufferedInputStream(obj1.getInputStream());
           mInStream = new DataInputStream(mBufInStream);
           try
           {
               int i = mBufInStream.read(buffer);
               return i;
           }
           catch (IOException ex)
           {
               return -1;
           }
     }

     public static void main(String args[])
     {
        MyClient cl1 = new MyClient();
        int ret = 0;
        byte[] data = {};

        ret = cl1.read(data);

     } 
 }

我想做的是在cl1.read完成后调用MyInputStream类的read方法。

我不知道我在这里想念的是什么。

我使用MyInputStream创建了DataInputStream对象并使其工作。 这是更新的代码:

public class MyClient {
 //InStreams
 protected DataInputStream mInStream;

 public int read(byte[] buffer)
 {
       MyClass obj1 =  new MyClass();
       mInStream = new DataInputStream(obj1.getInputStream());
       try
       {
           int i = mInStream.read(buffer);
           return i;
       }
       catch (IOException ex)
       {
           return -1;
       }
 }

 public static void main(String args[])
 {
    MyClient cl1 = new MyClient();
    int ret = 0;
    byte[] data = {};

    ret = cl1.read(data);

 } 
}

如果要扩展输入流类,则需要为以下方法提供具体的定义:

public abstract int read() throws IOException

您的班级的read方法的签名为:

public int read(byte[] b) throws IOException

因此,除了read(byte[] b)之外,还请实现read() read(byte[] b) 我进行了一些修改,现在可以使用...

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;

public class MyClient {
     //InStreams
     protected BufferedInputStream mBufInStream;
     protected DataInputStream mInStream;

     public int read(byte[] buffer) {
           MyClass obj1 =  new MyClass();
        //   mBufInStream = new BufferedInputStream(obj1.getInputStream());
         //  mInStream = new DataInputStream(mBufInStream);
           try {
               int i = obj1.getInputStream().read(buffer);
               return i;
           } catch (IOException ex) {
               return -1;
           }
     }

     public static void main(String args[]) {
        MyClient cl1 = new MyClient();
        int ret = 0;
        byte[] data = {'a','b'};

        ret = cl1.read(data);
        System.out.println(ret);
     } 
 }



import java.io.IOException;
import java.io.InputStream;

class MyClass {

     /** Input stream */
     private final MyInputStream in = new MyInputStream();
     //get the InputStream
     public InputStream getInputStream() {
         return in;
     }

     class MyInputStream extends InputStream {
         //here i am keeping implementation of read methods
         public int read( byte b[] ) throws IOException {
            System.out.println("Inside my read()");
            return b.length;
         //..................
         }

        @Override
        public int read() throws IOException {
            // TODO Auto-generated method stub
            return 0;
        }
     }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM