     8 

     -    

       (stream)    
 .    ,   
   ,       . 
,        .  
    ,     . 
        . 
            .   
     ,     
 .  ,      
  .        ,  
       .    
       .   
  ,    .  , 
        (  ). 
    ,       .     
,      ,    
.   ,      . 
        ,    . 
    ,       ,  
    . " ", ..   
   , .     , 
            ,   
   . 
        .     
       ,     
   .        
.          
,        ,     . 

    239 

           , 
   .       
  ,         . 

     InputStream  Outputstream 

             
     .      
.  JavaOutputStream    , 
 JavalnputStream    . 
                
    . ,     Java 
   FileOutputStream.     
    . ,    
 ,         Fileln-putStream. 
     OutputStream  InputStream  .      
   . ,   InputStream 
   readQ.      
 .   OutputStream    writeQ, 
   ,     .  
 OutputStream  InputStream  ,    
  . 
      OutputStream  InputStream       
  .       
   ,    , 
  ,      . ,   
 ,      
   OutputStream  Input-Stream. 
      OutputStream  InputStream  ,  
    .   java.io  
   ,   OutputStream  
InputStream    .     
   .   "  ,   
   ,      
   .     ' 
,     ,   . 

       InputStream 

            
 ,    OutputStream  Input-Stream. 
,   FilelnputStream    

    24	Visual J++:   

    readQ  InputStream      
,       .    
writeQ   FileOutputStream     
,       .    
     Input-Stream  OutputStream  
    . 

          

    FilelnputStream	  InputStream,     . 
    ByteArraylnptitStream        InputStream,    
   . 
    SocketlnputStream	  InputStream,     TCP/IP. 
    PipedlnputStream	  InputStream,   ,  
 PipedOutputStream. ,    PipedOutputStream, 
    PipedlnputStream.    
 ,      . 
    StringBufTerlnputStream        ByteArraylnputStream,  
    . ____ 

      InputStream 

      InputStream   ,   
 .   ,   InputStream, 
        Input-Stream. 
      readQ  InputStream    ,  
          . 
   readQ        
       ,     
0  255.         (  
),    -1.      ,  
  read()  InputStream.      
     ,      
        . 
    public boolean readToChar(InputStream is, int ch) { 
    for (int  = is.read();  != -1 &S~c~!= ch;  = is.read()); return(c != -1 
? true : false); 
    } 
          read(),    
         ,   
    ,      

     8.  -    241 

.      :  ,  
 ,   ,   .    
.    ,    , 
  -1,      .   
       . 
              
   .       
,         . 
    ,      
.    ,      
   .       
   ,      . 

    public void  readSomeBytes(InputStream  is,   byte[]   ab)    { //  
          , int  n  = is. read ; 
    //        , is.read(ab,   0,   n); } 

     skipQ  InputStream      
.        ,     
     ,    .   
skipQ   :  ,   . 
      InputStream   ,   
     .  mark() (,   
,    )   InputStream   
  ,        
.     ,   InputStream,   
 ,            
! (   Bufferedln-putStream   
   ,       .) 
       ,     InputStream  
    ,   InputStream   
markSupportedQ.     true,    
InputStream   mark()  resetQ.     
  false. 
     resetQ   markQ.       
 mark(),         resetQ. 
,            
    ,     : 

    242	Visual J++:   


    public byte[] lookAhead(InputStream is) { if (! is .markSupportedO ) 
return null; 
    is.mark();	/ byte ab[] = new byte[4];     ? is .read(ab) ;       4~"^ 
    is.reset ();	( return ab; 
    } 

     availableQ  InputStream   ,   
 .      ,  
 ,     ,   readQ, 
    .  available()   , 
   ,     
 .   -1,   . 
         ,    closeQ, 
      ,    . 

     FilelnputStream 

     FilelnputStream   InputStream     
    .     FilelnputStream 
     ,   File,   
FileDescription.     FilelnputStream    
,   .     , 
  ,       ( 
 FilelnputStream): 

    import java.io.*; 
    public class MyProgram { FilelnputStream in; 
    public void main(String[) astrArgs) { if(astrArgs.length < 1) { 
    System.err.println("UsageError: run MyProgram class \ through  interpreter 
with \ arguments:\n <input-filename>"); System exit(-l); } 
    try { 
    in  = new FilelnputStream(astrArgs[I]); }   catch(FileNotFountException  
e)    { 
    System.err.println("Error:   file  not  found:   "  + astrArgs[1]}; 


     8.  -   	243 


    System.exit(-1); 
    } 
    //     .. 
    try { 
    in.close (); } catch (lOException e) ( 
    //  ... 


     ByteAiTaylnputStream 

      ByteArraylnputStream,      
  .         , 
      .  resetQ  
ByteArraylnputStream   ,     
      . 
        ByteArraylnputStream   
  ,      . 
  ,        
   -  : 

    byte ab[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05);    // . 
    InputStream isl = new ByteArraylnputStream(ab);      //  . 
InputStream is2 = new ByteArraylnputStream(ab, 2,3); 
    //  ,   . 


     SocketlnputStream 

       SocketlnputStream,    
      .  
SocketlnputStream   naKCTejava.net.   9   
     . 
      , FilelnputStream  SocketlnputStream,   
 InputStream,    ,    
 ,   URL.  ,   HTML-, 
       ,   ,  
 Internet:          
 ,         
.       ,     
    FilelnputStream.     
Internet   HTTP  FTP,     
SocketlnputStream.          
 InputStream   ,   . 

    244	Visual J++:   


     PipedlnputStream 

      PipedlnputStream  ,    
   .        
.           
  ,      .   
    PipedlnputStream  ,   
 PipedlnputStream   readQ.  ,  
  PipedlnputStream,     ,    , 
       PipedOutputStream.  
      PipedlnputStrearn/ 
PjpgdOutputStream       . 

    import java.applet.*; import java.awt.*; import java.io.*; 
    class MyApplet extends Applet implements Runnable { PipedlnputStream 
m__iskeys; PipedOutputStream m_oskeys; double m_dblAverageKey; int 
m_nKeyCount; Thread m_thread; 
    public void init() { 
    m_osl;ys = new PipedOutputStream(); try {v  
    m_iskeys = new PipedlnputStreamlm oskeys); } catch (lOException ioe) {     
    T--- 
    //  ... ) } 
    public void start () { 
    m_dblAverageKey = 0.0; 
    m_nKeyCount = 0; 
    m_thread = new Thread(this); 
    m_thread.start(); } 
    public void stop() { m_thread = null; } 
    public boolean keyDown(Event evt, int key) { try { 
    m_oskeys.write(key); } catch (lOException e) { 
    //  ... 1 


     8.  -   	245 


    System.out.println("Key was hit: " + key); return true; } 
    public void run() ( 
    int key; 
    while(null != m_thread) { try { 
    key = m_iskeys.read() ; } catch (lOException e) { 
    //  ... } 
    m_dblAverageKey *= m_nKeyCount; m_dblAverageKey += key; m_dblAverageKey /= 
++m_nKeyCount; repaint (); 
    } ) 
    public void paint (Graphics g) { 
    FontMetrics fm = g.getFontMetrics(); 
    g.drawstring("Average key value: " + m_dblAverageKey, fm.getMaxAdvance() , fm.getHeight()); 
    ) } 


     StringBuffeMnputStream 

     StringBufferlnputStream   ByteArraylnputStream,  
     ,     String.   
  ,     (    
   ),     StringBufferlnputStream , 
  ByteArraylnputStream.    ,   
     ,   . 

       

      ,    InputStream,   
  .    , 
    InputStream,     
        .    
     .   Filterln-putStream 
  /,   protected,    
 InputStream.    FilteredlnputStream   
    in. 
      FilterlnputStream      , 
   in  InputStream.     


    246 Visual J++:   

.   ,   FilteredlnputStream, 
   -  ,     
readQ  FilterlnputStream.  readQ     in  
InputStream.         java.io 
,    FilterlnputStream     
  . 

    	

    BufferedlnputStream	     .       
       .     
      . 
    DatalnputStream	  readBoolean()  readlnt(),  
         . 
    LineNumberlnputStream        -. 
       . 
    PushbacklnputStream          ,    
     (..      , 
       ).   , 
     PushbacklnputStream, . 
    SequencelnputStream               
     . 

     FilterlnputStream      
InputStream.  ,    ,    
 public-. ,   LineNumberlnputStream  
,    InputStream,   getLineNumberQ  setLineNumberQ. 

     BufferedlnputStream 

     BufferedlnputStream     . 
         , 
   in.    BufferedlnputStream 
    InputStream. 
            .   
,        
  .       readQ  
   in   ,  BufferedlnputStream 
        .  
       .  
    ,  ,    
 . 
      BufferedlnputStream,  ,  
    ,     , 

     8.  -   	247 

    mark()  reset()  InputStream.   
 mark()          
 .    resetQ  BufferedlnputStream 
" "         
  .     
mark()     ,   
 .   markQ   N,   , 
   ,        
N . 

     LineNumberlnputStream 

         FilterlnputStream,      
 ,      .  
   BufferedlnputStream,  readQ  LineNum-berlnputStream 
     ,       readQ 
  InputStream. 
             
    ,   
LineNumberln-putStream.  LineNumberlnputStream    
       .   
  :     '\',  
   '\' , ,   ,  
    .     
   LineNumberlnputStream    
 ,         
    . 
     LineNumberlnputStream    ,   
.  getLineNumber()      
  .  setLineNumber()    
  ,    . 
       ,      
  LineNumberlnputStream.      
     . 

    import java.io*; 
    public class LineCounter { 
    static LineNumberlnputStream m_istreamLineNum; 
    public static void main(String astrArgs[]) { if(1 != astrArgs.length) { 
    System.err.println("Usage error:\n LineCounter <input-file>") ; 
System.exit (-1); } try { 
    FilelnputStream is =new FilelnputStream(astrArgs[0]); m_istreamLineNum = 
new LineNumberlnputStream(is); 


    248	Visual J++:   


    } catch (Exception e) { 
    System.err.println("Error:\n Opening input file" +astrArgs[0]); 
    System.exit(-1); } 
    try { 
    while (-1 != m_istreamLineNum.read()); } catch (Exception e) { 
    System.err.println("Error:\n Reading from the input\flie."); 
    } 
    System.out.println("Line numbering complete. Number of Lines is: " + 
    m_streamLineNum.getLineNumber()}; } 
    } 

     LineNumberlnputStream    ,  
   .  ,    
I^lter^dlnputStream    :  
ByteCoun-te7lnpuTsfream     ,  
 read();  CharacterCounterlnputStream    
 ,   readQ,  . .    
 ,      FiteredlnputStream,  
      .    
,  ,   ,    
  

     PushbacklnputStream 

     PushbacklnputStream,   BufferedlnputStream,  
    ,     
.      ,    
" "    .  ,    
,      .  unreadQ (  
,       readQ  
PushbacklnputStream)         
.       unreadQ   readQ,  
   ,     unreadQ. 

     DatalnputStream 

      DatalnputStream     , 
         in 
    .    , ,  
      long  String.   
 DatalnputStream         
.       ,   
   ,  ,     . 

     8.  -   	249 


            DatalnputStream    

    boolean	readBoolean().      .   
 false,   true. 
    byte	readByte().    read()   ,  
  byte,       int. readUnsignedByte() 
   ,    read().  ,    
     -1.    ,   
        EOFException. 
    char	readChar().      Unicode (16   2 
).      ,    . 
       (  
 )     . 
    double	readDouble().      8   
 double.    ,      8 . 
    float	readFloat().  32-   float.   
 ,      4 . 
    short	readShort().     16-   . 
   ,      . 
    readUnsignedShort().    16 ,     32- . 
    int	readlntQ.      32-  
 .    ,     4 . 
    long	readLongQ.      64-  
 .    ,      8 . 
    String	readUTF().      .  
       UTF. (    
   
    _____________DataOutputStream,   DatalnputStream.)____ 

     ,         
    EOFException,    .  
readQ,   DatalnputStream     
FilterlnputStream,   ,       
InputStream.     EOFException,   ,  
   .      -1. 
      12    ,     
ObjectlnputStream  ObjectOutputStream,    
DatalnputStream  DataOutputStream.        
   . 

    25 Visual J++:   


     SequencelnputStream 

     SequencelnputStream     -  
""  .         ,  
 .  SequencelnputStream       
      readQ. ,    
       readQ  
SequencelnputStream,   ,     
  ,        . , 
  InputStream   , . 
      ,       
LineCounter,         . 

    import java.io.*; import Java.util.*; 
    public class MultiFileLineCounter { 
    public static void main(String astrArgs[]) { SequencelnputStream sis; try { 
    //   ,   //      
 . Vector vectFiles = new Vector (); for(int ii=0; 
ii<astrArgs.length; ii++) vectFiles.addElement(new 
    FilelnputStream(astrArgs[ii])); 
    sis = new SequencelnputStream(vectFiles.elements()); } catch (Exception e) { 
    System.err.println("Problem opening input file(s)."); System.exit(-1); } 
    //     SequencelnputStream. LineNumberlnputStream 
lis = new LineNumberlnputStream(sis); 
    try { 
    while(-1 != lis.read()); } catch (Exception e) { 
    System.err.println("Problem reading from input file(s)."); 
    System.exit(-1); } 
    System.out.println("Total count of lines is " + 
    lis.getLineNumber()); } } 

      SequencelnputStream   .    
  .        '  
Vector.elements(),       Vector.  
        . 

     8.  -    251 

       SequencelnputStream    
     .     
,         ?      
,        ,   ~. 

    Lie   FilteredlnputStream 

         MultiFileLineCounter   
 :      .   
  LineNumberlnputStream   ,  
     : SequencelnputStream. 
,   ,  ,     
 ,      (FilelnputStream). 
              
InputStream,          
  ,     ,  . 
.     FilterlnputStream   
  . 8.1.  ,     
       
   .     
MultiFileLineCounter.       
FilelnputStream   SequencelnputStream,   
    .  LineNumberlnputStream,   , 
  SequencelnputStream,    
  . (,      
     " ",    
      .) 

    InputStrcam		Filter Input Stream		Filter Input Stream	U--	Filter Input Stream 
     >		 * 
    IOTOK,  ;  		  
InputStream		                            
 FilterlnputStream         FilterlnputStream 

    . 8.1.   FilterlnputStream 


    252 Visual J++:   


      FilterlnputSfream 

    ,        
,     ,   
 FilterlnputStream,     java.io.   
 ,      
  : 
    1.       . ,  
LineNumberlnputStream   ,  
  . 
    2.           
    .    . 
    3.      .    
 ,   FilterlnputStream   . 
,  readXXX()  DatalnputStream,   read-BooleanQ  
readDoubleQ,          
 . 
    ^^1Ϩ^, (^^^^^ (translation)  
" .       
  ,    .     
  ,   ,    
 FilterlnputStream,       . 
         .     
RatedlnputStream,       
  (      ).   
  DatalnputStream  RatedlnputStream  
   !  RatedlnputStream  
  ,     readQ,  , 
    readXXXQ  DatalnputStream,   
 . 
            .  
 ,        
 .      RatedlnputStream  
DatalnputStream ,  DatalnputStream  
RatedlnputStream,       . 
            RatedlnputStream. 
        ,   
    readQ.      
getRateQ,           
,     .  resetRate()    
     readQ. 

     8.  -   	253 


    import java.io.*; 
    public class KatedlnputStream extends FilterlnputStream { I/  
    // InputStream. public 
RatedlnputStream(InputStream in) { 
    super(in); 
    m_dStartTime = -1.0; 
    m_dByteCount = 0.0; } 
    //  readO  m_dByteCount    
    //  .      , 
    //   , 
    public int read() { 
    if(-l == (int )m_dStartTime) 
    m_dStartTime = System.currentTimeMillis(); try { 
    m_dByteCount++; return in. readO ; } catch (lOException e) { 
    return -1; } } 
    //  getRateO   ( double) //    
  , public double getRateO { if(m_dStartTime <= 0.0) return 0.0; 
    return m_dByteCount / (m_dStartTime * 1000) ; } 
    public void resetRateO { 
    m_dStartTime = -1.0; 
    m_dByteCount = 0.0; } 
    // Private- , private double m_dStartTime; private 
double m_dByteCount; } 

     ,       
 ,    read(),    
 .   FilterlnputStream    
   read(),      
  (read(byte[ ])  read(byte[ ], offset, length)).    
    read(),   . 
,        

    254	Visual J++:   

     readQ    .     
     . 

     OutputStream 

         ,    ,  
  ,    .    
 ,   .     , 
  .  InputStream  OutputStream  
,  read()  writeQB   . 
    ,     OutputStream   write(). 
 writeQ  OutputStream   readQ  Input-Stream. 
 writeQ       (  
).        ,  " 
"     ,       
 . 
         writeQ,     
  readQ  InputStream.     
     ,      
   .       
 writeQ,     read()  
InputStream:	-  - . 

    public  void write(byte  ab [ ])   throws   lOException; 
    public void write(byte  ab[],   int offset,   int  length)throws   lOException; 

       OutputStream  flushQ  closeQ.  flushQ 
      . ,  
flushQ  BufferedOutputStream    
      ,    
  .  flushQ   .     
OutputStream      writeQ  flush(). 
     closeQ    .    
  ,    write()  flushQ  
    lOException. 

      OutDiitStream 

             
      .     
      .  
     ,    , 
  " ".  ,  BufferedOutputStream 
  ,       
writeQ.    ,      
   

     8.  -   	255 

 .     ,     
,     .      
    . ,   
TLineNumberlnputStream   java.io    
LineNumberOutputStream.        
LineNumberOutputStream,   FilteredOutputStream.   
    ,     , 
   . 
          

    OutputStream	      .   
  write()  flush(),    . 
    ByteArrayOutputStream            . 
    FileOutputStream	    .    
   ,   File    File Descriptor. 
    SocketOutputStream	                .     
    SocketlnputStream        
read()       ,     . 
    PipedOutputStream	      
 PipedlnputStream    .     
PipedOutputStream         PipedlnputStream. 
    FilterOutputStream	      . 
        write() 
 OutputStream.        
,         , 
    FilterlnputStream. 
    BufferedOutputStream            FilterOutputStream. 
    ,   .   
,        
OutputStream.         write(). 
    DataOutputStream	   FilterOutputStream,  
 DatalnputStream.  writeBoolean(), writelnt()  writeUTF() 
     OutputStream   
 .        DatalnputStream. 

    256 Visual J++:   


      InputStream 

       InputStream    
.      ,     
    .  DatalnputStream  
    .    , 
    .  DatalnputStream  
,     : read-BooleanQ, readlntQ 
 readUTFQ. ,       . 
         DatalnputStream   
   ,    ,  
,    .     
 : 

    public String[] readStrings(InputStream is) throws lOException { 
    DatalnputStream dis = new DatalnputStream(is); 
    int nStrings = dis.readlnt(}; 
    String[] astr = new String[nStrings]; 
    for(int ii=0; ii<nStrings; ii + + ) astr[ii] = dis.readUTF(); 
    return astr; } 

             (,   
    Java)?   ,  
,   .  ,    Java  
 ASCII-,    , ,   ,  
  DatalnputStream       UTF ( 
,    DataOutputString.writeUTFf)"   ). 
         java.io   StreamTokeni/er. 
           (tokens). 
      .  StreamTo-kenizer  
        ,   
ASCII-.  ,   ,    , 
          
,   . 
    ,        ,    
      .    
 ,    ,    
DatalnputStream,      . 
     StreamTokenizer    FilterlnputStream,    
  readQ.         
     .  nextTo-kenQ 
 StreamTokenizer  ,    , 
  InputStream. 

     8.  -   	257 

      StreamTokenizer    .   
    StreamTokenizer,    
 ,     . 

           

    TT_NUMBER          -.     
 nval  StreamTokenizer. 
    TT_WORD	 -.      
sval  StreamTokenizer. 
    TT_EOL	  . 
    TT_EOF                     . 

    <>	  ,   NextToken();  
  ASCII-  .    
    . 
        ,     ,  
,   ,  : 

    public void parselnputStream(InputStream is) { 
    StreamTokenizer st = new StreamTokenizer (is); int nTokenType; 
    while(nTokenType = st.nextToken ()) != StreamTokenizer.TT_EOF) { 
switch(nTokenType) ( 
    case StreamTokenizer.TT_EOL: doSomethingWithEOL(); break; 
    case StreamTokenizer.TT_WORD: 
    doSomethingWithString(st.sval) ; break; 
    case StreamTokenizer.TT^NUMBER: 
    doSomethingWithDouble(st.nval) ; break; 
    ) ) } 

      StreamTokenizer  .    
  StreamTokenizer  ,      
 TT_WORD,    ,    
StreamTokenizer      . . 
     ,  StreamTokenizer     
   .  ,   
StreamTokenizer    ,   
 "/*"  "*/",   C++,   "//"  
   . 

    258	Visual J++:   

       ,  .  
StreamTokenizer        
,        .    
      TT_WORD  TT_NUMBER.    
  StreamTokenizer      0  32  
.   whitespaceCharsQ  StreamTokenizer,  
      .      
          
 ASCII.  ,   ,  StreamTokenizer 
  .   ,    , 
 ,      ,   
   : 

    public int[] parseCommaDelimitedNumbers(InputStream is) { int anRet[] = 
new int[10]; int nNumbers = 0; 
    StreamTokenizer st = new StreamTokenizer(is); is.whitespaceChars(',', ','); 
    while (StreamTokenizer .TT__NUMBER == st.nextToken()) ( if(nNumbers == 
anRet.length) { 
    int an[] = new int[anRet.length*2]; System.arraycopy(anRet, 0, an, 0, 
anRet.length); anRet = an; } 
    anRet[nNumbers++] = (int)st.nval; } 
    int an[] = new int[nNumbers]; 
    System.arraycopy(anRet, 0, an, 0, nNumbers); 
    return an; 
    } 

       StreamTokenizer    
   .    ,  
  StreamTokenizer    parseNumbers(), 
  ,       double. 
    StreamTokenizer,     
 ,    clearSyntaxQ,    
 ASCII ,    .   
     ,   wordCharQ, 
ordinaryCharQ, whitespaceCharQ, commentCharQ  quoteChar().    
    StreamTokenizer.     
 ,    ,    
clearSyntaxQ      StreamTokenizer   
 . 
     ,   -    
whitespaceChars(),      

     8.  -   	259 

      ordinaryCharQ  ordinaryCharsQ.  ordinaryCharQ 
    ,      ordinaryChars() 
   . 
       ,    ,     
 wordCharQ  wordsCharQ.  wordCharQ    
   ,   wordsCharQ   ASCII-. 
     ,   ,   StreamTo-kenizer 
    TT_WORD,        
 .  quoteChar()  StreamTokenizer   , 
     ,  .   
   StreamTokenizer   ,  , 
  '\"   '\'" . 
    ,  ,     , 
  .  commentCharQ  StreamTokenizer 
       .   
   StreamTokenizer     
  ("/*"  "*/")  C++ ("//").       
"/*"  "*/",    slashStarCommentsO,   
 true.          
 ,       false.  
slashStarCommentsQ   true,     
,    "//",    .   
  false,         , 
   . 

      StreamTokenizer 

     ,   Sun    Visual J++,  
   StreamTokenizer   .   
   WireFrame,     
          . 
        WireFrame  "model".   
 URL ,    .    
 ,      .   
  .          
     : 

    v  X  Y Z 

     X, Y, Zopee    .  
 V      ,    

    26	Visual J++:   

        (  ).  
Wire Frame    ;     1, 
  2  . . 
          ^   
  .     : 

    (f     fo    1)    vl   v2   [v3   [v4   [...]]] 

     vl, v2...    .      
 : "f, "fo"  "1".  .  ,   
    WireFrame  . (, 
           
    ,      
.)    ,     
  vl   v2  ..   ,  , 
     .  . 8.2  
  WireFrame   .    : 

    V	0	0	0 
    V	1	0	0 
    V	1	1	0 
    V	0	1	0 
    V	0	0	1 
    V	1	0	1 
    V	1	1	1 
    V	0	I	1 
    f	1	2	3 
    f	5	6	7 
    1	1	5 
    1	2	6 
    1	3	7 
    1	4	8 

    ,      ,  
 WireFrame,  ,      
         WireFrame 
.    ,    ,   
  ,      
StreamTokenizer (   ,    ). 

     8.  -   	261 


    . 8.2.   Wire Frame    

     WireFrame       Model3D. 
  ModeOD       
 .   ModeOD   ,  
StreamTokenizer,         
   ModeOD.      
ModeOD,   : 

    Model3D   (InputStream is)   throws   lOException,   FileFormatException   
{ this(); 
    StreamTokenizer  st  =  new  StreamTokenizer(is); 
st.eolIsSignificant(true); st.commentchar('#'); scan: 
    while   (true)    { 
    switch (st.nextToken()) ( 
    9	default: 
    1	-    - . 
    	break scan; 
    case StreamTokenizer.TT_EOL: 
    break/case StreamTokenizer.TT_WORD: if ("v".equals(st.sval)) { 
    double x=0, y=0, z = 0; 
    if(st.nextToken() == StreamTokenizer.TT NUMBER) { 


    262 Visual J++:   


     = st.nval; 
    if(st.nextTokenO == StreamTokenizer.TT_NUMBER)( 
     = st.nval; 
    if (st.nextToken () =StreamTokenizer.TT__NUMBER) { z = st.nval; 
    addVert((float) x, (float) y, (float) z); while (st.ttype != 
StreamTokenizer.TT_EOL && st.ttype != StreamTokenizer.TT_EOF) st.nextToken(); 
    } else if ("f".equals(st.sval) || "fo".equals(st.val) || 
"1".equals(st.sval)) { int start = -1; int prev = -1; int n = -1; while (true) 
if (st.nextTokenO == 
    StreamTokenizer.TT_Number) ( n = (int) st.nval; if (prev >= 0) 
    add(prev - 1, n - 1) ; if (start < 0) start = n; prev = n; } else if 
(st.ttype == '/') 
    st.nextToken (); else 
    break; if (start >= 0) 
    add(start - 1, prev - 1); if (st.ttype != 
    StreamTokenizer.TT_EOL) break scan; } else ( 
    while (st.nextTokenO ! = 
    StreamTokenizer.TT_EOL && st.ttype != StreamTokenizer.TT EOF); 
    } } } 
    is.close(); 
    if (st.ttype != StreamTokenizer.TT_EOF) throw new 
FileFormatException(st.toString()); } 


     8.  - n  	263 


     

        ,   
.             
.  InputStream  OutputStream  java.io  
 ,   .    
 ,     InputStream.    
 ,     OutputStream.  InputStream  
OutputStream        
. ,   InputStream  OutputStream,   
      . ,  
FilelnputStream      .  
FileOutputStream      .  
FilterlnputStream         
 ,      . 
, F ilterOutputStream      
  . 
         ASCII    
   StreamTokenizer.    
     ,     
   .        
 .      StreamTokenizer.  
     ,   nextTokenQ. 

    264 Visual J++:   

