Hi Mihai, Here is confused part, in my override method, calling in.read() actually invoke/calls super class (FilterInputStream) read()?
Regards Kim On Tue, Jun 1, 2010 at 2:41 PM, Mihai DINCA <[email protected]> wrote: > Hi Kim > > You are right. In fact there are three methods to override. For e.g.: > -- Your Filter, inheriting FilterInputStream, has a constructor that sets > the "in" member. As it is protected, you can access it from your derived > class > -- Your overridden read() just makes something like char c = > Character.toUpperCase((char)in.Read()); > -- The read(byte[] b) calls in.read(b), then converts all the bytes > (assumed to be characters) to upper cases > -- The read(byte[] b, int off, int len) calls in.read(b, off, len) then > converts to upper cases only the bytes between the offset and offset + len. > Something like: > for ( int i = 0 ; i < len ; i++ ){ > b[off + i] = (byte)Character.toUpeerCase((char)b[off + i]); > > } > > Hope it helps > Mihai > > > Kim Ching Koh a écrit : > > Hi Mihai, > > Not sure what do you mean by read a buffer, do you mean > *read*<https://mail.google.com/mail/html/java/io/FilterInputStream.html#read%28byte%5B%5D%29>(byte[] > b)? > How about > *read*<https://mail.google.com/mail/html/java/io/FilterInputStream.html#read%28byte%5B%5D,%20int,%20int%29>(byte[] > b, > int off, int len)? Need to override too? > > read(byte[] b) seems to be calling read(byte[] b, int off, int len), so we > maybe able to to override read(byte[] b) but I am not sure how to override > read(byte[] int off, int len) > > In Exercise 8, read(byte[] int off int len) seem to calling itself? How > does this work? > public int read(byte[] b, int off, int len) throws IOException { > len = in.read(b, off, len); > if (len != -1) { > cksum.update(b, off, len); > } > return len; > } > Thanks. > KC > > > On Wed, May 26, 2010 at 2:15 PM, Mihai DINCA <[email protected]> wrote: > >> Hi Kim >> >> The idea of the topic is that InputStreams and OutputStreams are based on >> layers. Once you have an InputStream, you can read from it through a filter. >> For e.g., you can write InputStream in = new BufferedInputStream( new >> FileInputStream("filename.txt"));. The FileInputStream is the actual source >> of data, but you read it through a BufferedInputStream that allows a (more >> efficient) buffered read from the source, still allowing a byte-by-byte >> access. >> >> You can extend all this and write: >> InputStream in = new MyFilter1Stream( new MyFilter2Stream( new >> MyFilter3Stream( new FileInputStream("myfile.txt")))); >> where each filter adds something to the reading process. One of them >> might, for e.g., convert all the input characters to capital letters. >> >> The same idea applies to OutputStreams. You can have your own filter in >> the chain that converts, for e.g., all the dirty words in "***" strings. >> >> The homework is based by a lab exercise that reads from a file, through >> and InputStream, and echoes its contents to another one, through an >> OutputStream and asks to write other a filter for the input or a filter for >> the output that converts all letters to capital letters. >> >> To create your own FilterInputStream, you must override both read methods >> (the one that read on byte and the other that reads a buffer) so that they >> read from the source InputStream (one byte or a buffer), then convert the >> input to capital letters. Analogically, to create your own >> FilterOutputStream yo must override all the write methods. >> >> Hope it helps >> Mihai >> >> >> >> Kim Ching Koh a écrit : >> >> Hi, >> >> Anyone has done this homework can advise? >> >> Regards >> KC >> >> On Tue, May 25, 2010 at 2:53 PM, kc <[email protected]> wrote: >> >>> Hi, >>> >>> I am not too sure what is the requirement of the homework for java >>> stream I/O, is it just to overide read() in the >>> ChangeToUpperCaseInputStream class so it will convert and return to >>> uppercase? >>> >>> >>> 1. The homework is to either modify FilterInputOutputStream NetBeans >>> project you've done in Exercise 8 above or create a new project as >>> following. (You might want to create a new project by copying the >>> FilterInputOutputStream project. You can name the homework project in >>> any way you want but here I am going to call it MyIOStreamProject.) >>> Write ChangeToUpperCaseInputStream class, which extends >>> FilterInputStream. >>> Write ChangeToUpperCaseOutputStream class, which extends >>> FilterOutputStream. >>> >>> Use either ChangeToUpperCaseInputStream class or >>> ChangeToUpperCaseOutputStream class to convert the characters read to >>> upper case. >>> >>> Regards >>> KC >>> >>> -- >>> To post to this group, send email to >>> [email protected] >>> To unsubscribe from this group, send email to >>> [email protected]<javaprogrammingwithpassion%[email protected]> >>> For more options, visit this group at >>> http://groups.google.com/group/javaprogrammingwithpassion?hl=en >> >> >> -- >> To post to this group, send email to >> [email protected] >> To unsubscribe from this group, send email to >> [email protected] >> For more options, visit this group at >> http://groups.google.com/group/javaprogrammingwithpassion?hl=en >> >> > -- > To post to this group, send email to > [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/javaprogrammingwithpassion?hl=en > > -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/javaprogrammingwithpassion?hl=en
