001 /* 002 * This file is a part of the RMI Plugin for Eclipse tutorials. 003 * Copyright (C) 2002-7 Genady Beryozkin 004 * 005 * You are free to modify this file, as long as you leave 006 * the following copyright: 007 * 008 * This file is based on the Remote File System example of 009 * the RMI Plug-in for Eclipse. The original code is 010 * Copyright (C) 2002-7 Genady Beryozkin 011 */ 012 package demo.rmi.filesystem.client; 013 014 import java.io.IOException; 015 import java.io.InputStream; 016 017 import demo.rmi.filesystem.common.IRemoteInputStream; 018 019 /** 020 * A wrapper for a remote input stream. It extends {@link InputStream} 021 * so it can be used in APIs that expect {@link InputStream} and can't 022 * work with our {@link IRemoteInputStream}. Notice the implementation 023 * of {@link RemoteInputStreamWrapper#read(byte[], int, int)} that must 024 * use {@link IRemoteInputStream#read(int)}. 025 * 026 * @author Genady Beryozkin, rmi-info@genady.net 027 */ 028 public class RemoteInputStreamWrapper extends InputStream { 029 030 IRemoteInputStream is; 031 032 public RemoteInputStreamWrapper(IRemoteInputStream is) { 033 this.is = is; 034 } 035 036 @Override 037 public int read() throws IOException { 038 return is.read(); 039 } 040 041 @Override 042 public int available() throws IOException { 043 return is.available(); 044 } 045 046 @Override 047 public void close() throws IOException { 048 is.close(); 049 } 050 051 @Override 052 public int read(byte[] b) throws IOException { 053 return read(b, 0, b.length); 054 } 055 056 /* 057 * (non-Javadoc) 058 * @see java.io.InputStream#read(byte[], int, int) 059 * @see IRemoteInputStream#read(int) 060 */ 061 @Override 062 public int read(byte[] b, int off, int len) throws IOException { 063 byte[] buf = is.read(len); 064 if (buf == null) { 065 return -1; 066 } 067 System.arraycopy(buf, 0, b, off, buf.length); 068 return buf.length; 069 } 070 071 @Override 072 public long skip(long n) throws IOException { 073 return is.skip(n); 074 } 075 }