Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * ====================================================================
   * Copyright (c) 2004-2006 TMate Software Ltd.  All rights reserved.
   *
   * This software is licensed as described in the file COPYING, which
   * you should have received as part of this distribution.  The terms
   * are also available at http://svnkit.com/license.html
   * If newer versions of this license are posted there, you may use a
   * newer version instead, at your option.
  * ====================================================================
  */
 package org.tmatesoft.svn.core.internal.io.fs;
 
 import java.io.File;
 import java.util.Map;
 

Author(s):
TMate Software Ltd.
Version:
1.1.0
 
 public class FSFile {
     
     private File myFile;
     private FileChannel myChannel;
     private FileInputStream myInputStream;
     private long myPosition;
     
     private long myBufferPosition;
     
     private ByteBuffer myBuffer;
     private ByteBuffer myReadLineBuffer;
     private CharsetDecoder myDecoder;
     private MessageDigest myDigest;
     
     public FSFile(File file) {
          = file;
          = 0;
          = 0;
          = ByteBuffer.allocate(4096);
          = ByteBuffer.allocate(4096);
          = Charset.forName("UTF-8").newDecoder();
     }
     
     public void seek(long position) {
          = position;
     }
 
     public long position() {
         return ;
     }
 
     public long size() {
         return .length();
     }
     
     public void resetDigest() {
         if ( == null) {
             try {
                  = MessageDigest.getInstance("MD5");
             } catch (NoSuchAlgorithmException e) {
             }
         }
         .reset();
     }
     
     public String digest() {
         String digest =  SVNFileUtil.toHexDigest();
          = null;
         return digest;
     }
     
     public int readInt() throws SVNException {
         String line = readLine(80);
         if (line == null) {
             SVNErrorMessage err = SVNErrorMessage.create(."First line of ''{0}'' contains non-digit");
             SVNErrorManager.error(err);
         }
         try {
             return Integer.parseInt(line);
         } catch (NumberFormatException nfe) {
             SVNErrorMessage err = SVNErrorMessage.create(."First line of ''{0}'' contains non-digit");
             SVNErrorManager.error(err);
        }
        return -1;
    }
    
    public String readLine(int limitthrows SVNException {
        allocateReadBuffer(limit);
        try {
            while(.hasRemaining()) {
                int b = read();
                if (b < 0) {
                    SVNErrorMessage err = SVNErrorMessage.create(."Can''t read length line from file {0}"getFile());
                    SVNErrorManager.error(err);
                } else if (b == '\n') {
                    break;
                }
                .put((byte) (b & 0XFF));
            }
            .flip();
            return .decode().toString();
        } catch (IOException e) {
            SVNErrorMessage err = SVNErrorMessage.create(."Can''t read length line from file {0}: {1}"new Object[]{getFile(), e.getLocalizedMessage()});
            SVNErrorManager.error(erre);
        }
        return null;
    }
    public String readLine(StringBuffer bufferthrows SVNException {
        if (buffer == null) {
            buffer = new StringBuffer();
        }
        boolean endOfLineMet = false;
        try {
            while (!endOfLineMet) {
                allocateReadBuffer(160);
                while(.hasRemaining()) {
                    int b = read();
                    if (b < 0) {
                        SVNErrorMessage err = SVNErrorMessage.create(."Can''t read length line from file {0}"getFile());
                        SVNErrorManager.error(err);
                    } else if (b == '\n') {
                        endOfLineMet = true;
                        break;
                    }
                    .put((byte) (b & 0XFF));
                }
                .flip();
                buffer.append(.decode().toString());
            }
        } catch (IOException e) {
            SVNErrorMessage err = SVNErrorMessage.create(."Can''t read length line from file {0}: {1}"new Object[]{getFile(), e.getLocalizedMessage()});
            SVNErrorManager.error(erre);
        }
        return buffer.toString();
    }
    public Map readProperties(boolean allowEOFthrows SVNException {
        Map map = new HashMap();
        String line = null;
        try {
            while(true) {
                try {
                    line = readLine(160); // K length or END, there may be EOF.
                } catch (SVNException e) {
                    if (allowEOF && e.getErrorMessage().getErrorCode() == .) {
                        break;
                    }
                    SVNErrorMessage err = SVNErrorMessage.create(.);
                    SVNErrorManager.error(erre);
                }
                if (line == null || "".equals(line)) {
                    break;
                } else if (!allowEOF && "END".equals(line)) {
                    break;
                }
                char kind = line.charAt(0);
                int length = -1;
                if ((kind != 'K' && kind != 'D') || line.length() < 3 || line.charAt(1) != ' ' || line.length() < 3) {
                    SVNErrorMessage err = SVNErrorMessage.create(.);
                    SVNErrorManager.error(err);
                } 
                try {
                    length = Integer.parseInt(line.substring(2));
                } catch (NumberFormatException nfe) {
                    SVNErrorMessage err = SVNErrorMessage.create(.);
                    SVNErrorManager.error(err);
                }
                if (length < 0) {
                    SVNErrorMessage err = SVNErrorMessage.create(.);
                    SVNErrorManager.error(err);
                }
                allocateReadBuffer(length + 1);
                read();
                .flip();
                .limit(.limit() - 1);
                String key = .decode().toString();
                if (kind == 'D') {
                    map.put(keynull);
                    continue;
                }
                line = readLine(160);
                if (line == null || line.length() < 3 || line.charAt(0) != 'V' || line.charAt(1) != ' ') {
                    SVNErrorMessage err = SVNErrorMessage.create(.);
                    SVNErrorManager.error(err);
                }
                try {
                    length = Integer.parseInt(line.substring(2));
                } catch (NumberFormatException nfe) {
                    SVNErrorMessage err = SVNErrorMessage.create(.);
                    SVNErrorManager.error(err);
                }
                if (length < 0) {
                    SVNErrorMessage err = SVNErrorMessage.create(.);
                    SVNErrorManager.error(err);
                }
                allocateReadBuffer(length + 1);
                read();
                .flip();
                .limit(.limit() - 1);
                String value = .decode().toString();
                map.put(keyvalue);
            }
        } catch (IOException e) {
            SVNErrorMessage err = SVNErrorMessage.create(.);
            SVNErrorManager.error(erre);
        }
        return map;
    }
    
    public Map readHeader() throws SVNException {
        Map map = new HashMap();
        String line;
        while(true) {
            line = readLine(1024);
            if ("".equals(line)) {
                break;
            }
            if (line == null) {
                
            }
            int colonIndex = line.indexOf(':');
            if (colonIndex <= 0 || line.length() <= colonIndex + 2) {
                SVNErrorMessage err = SVNErrorMessage.create(."Found malformed header in revision file");
                SVNErrorManager.error(err);
            } else if (line.charAt(colonIndex + 1) != ' ') {
                SVNErrorMessage err = SVNErrorMessage.create(."Found malformed header in revision file");
                SVNErrorManager.error(err);
            }
            String key = line.substring(0, colonIndex);
            String value = line.substring(colonIndex + 2);
            map.put(keyvalue);
        }
        return map;
    }
    
    public int read() throws IOException {
        if ( == null ||  <  ||  >=  + .limit()) {
            if (fill() <= 0) {
                return -1;
            }
        } else {
            .position((int) ( - ));
        }
        int r = (.get() & 0xFF);
        if ( != null) {
            .update((byter);
        }
        ++;
        return r;
    }
    public int read(ByteBuffer targetthrows IOException {
        int read = 0;
        while(target.hasRemaining()) {
            if (fill() < 0) {
                return read > 0 ? read : -1;
            }
            .position((int) ( - ));
            int couldRead = Math.min(.remaining(), target.remaining());
            int readFrom = .position() + .arrayOffset();
            target.put(.array(), readFromcouldRead);
            if ( != null) {
                .update(.array(), readFromcouldRead);
            }
             += couldRead;
            read += couldRead;
            .position(.position() + couldRead);
        }
        return read;
    }
    public int read(byte[] bufferint offsetint lengththrows IOException {
        int read = 0;
        int toRead = length;
        while(toRead > 0) {
            if (fill() < 0) {
                return read > 0 ? read : -1;
            }
            .position((int) ( - ));
            int couldRead = Math.min(.remaining(), toRead);
            .get(bufferoffsetcouldRead);
            if ( != null) {
                .update(bufferoffsetcouldRead);
            }
            toRead -= couldRead;
            offset += couldRead;
             += couldRead;
            read += couldRead;
        }
        return read;
    }
    public File getFile() {
        return ;
    }
    public void close() {
        if ( != null) {
            try {
                .close();
            } catch (IOException e) {}
            SVNFileUtil.closeFile();
             = null;
             = null;
             = 0;
             = null;
        }
        
    }
    
    private int fill() throws IOException {
        if ( == null ||  <  ||  >=  + .limit()) {
             = ;
            getChannel().position();
            .clear();
            int read = getChannel().read();
            .position(0);
            .limit(read >= 0 ? read : 0);
            return read;
        } 
        return 0;
    }
    
    private void allocateReadBuffer(int limit) {
        if (limit > .capacity()) {
             = ByteBuffer.allocate(limit*3/2);
        }
        .clear();
        .limit(limit);
    }
    
    private FileChannel getChannel() throws IOException {
        if ( == null) {
             = new FileInputStream();
             = .getChannel();
        }
        return ;
    }
    
    public PathInfo readPathInfoFromReportFile() throws IOException {
        int firstByte = read();
        if (firstByte == -1 || firstByte == '-') {
            return null;
        }
        String path = readStringFromReportFile();
        String linkPath = read() == '+' ? readStringFromReportFile() : null;
        long revision = readRevisionFromReportFile();
        boolean startEmpty = read() == '+' ? true : false;
        String lockToken = read() == '+' ? readStringFromReportFile() : null;
        return new PathInfo(pathlinkPathlockTokenrevisionstartEmpty);
    }
    private String readStringFromReportFile() throws IOException {
        int length = readNumberFromReportFile();
        if (length == 0) {
            return "";
        }
        byte[] buffer = new byte[length];
        read(buffer, 0, length);
        return new String(buffer"UTF-8");
    }
    private int readNumberFromReportFile() throws IOException {
        int b;
        ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
        while ((b = read()) != ':') {
            resultStream.write(b);
        }
        return Integer.parseInt(new String(resultStream.toByteArray(), "UTF-8"), 10);
    }
    private long readRevisionFromReportFile() throws IOException {
        if (read() == '+') {
            return readNumberFromReportFile();
        }
        return .;
    }
    
New to GrepCode? Check out our FAQ X