Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/DataAccessProvider.java @ 606:5daa42067e7c
Avoid mmap files when only few bytes are to be read
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 07 May 2013 14:16:35 +0200 |
| parents | ed243b668502 |
| children | e1b29756f901 |
comparison
equal
deleted
inserted
replaced
| 605:c56edf42be64 | 606:5daa42067e7c |
|---|---|
| 82 // ensure contract of CFG_PROPERTY_MAPIO_LIMIT, for mapioBoundary == 0 use MAX_VALUE so that no file is memmap-ed | 82 // ensure contract of CFG_PROPERTY_MAPIO_LIMIT, for mapioBoundary == 0 use MAX_VALUE so that no file is memmap-ed |
| 83 private static int mapioBoundaryValue(int mapioBoundary) { | 83 private static int mapioBoundaryValue(int mapioBoundary) { |
| 84 return mapioBoundary == 0 ? Integer.MAX_VALUE : mapioBoundary; | 84 return mapioBoundary == 0 ? Integer.MAX_VALUE : mapioBoundary; |
| 85 } | 85 } |
| 86 | 86 |
| 87 public DataAccess createReader(File f) { | 87 public DataAccess createReader(File f, boolean shortRead) { |
| 88 if (!f.exists()) { | 88 if (!f.exists()) { |
| 89 return new DataAccess(); | 89 return new DataAccess(); |
| 90 } | 90 } |
| 91 try { | 91 try { |
| 92 FileChannel fc = new FileInputStream(f).getChannel(); | 92 FileChannel fc = new FileInputStream(f).getChannel(); |
| 93 long flen = fc.size(); | 93 long flen = fc.size(); |
| 94 if (flen > mapioMagicBoundary) { | 94 if (!shortRead && flen > mapioMagicBoundary) { |
| 95 // TESTS: bufLen of 1024 was used to test MemMapFileAccess | 95 // TESTS: bufLen of 1024 was used to test MemMapFileAccess |
| 96 return new MemoryMapFileAccess(fc, flen, mapioBufSize, context.getLog()); | 96 return new MemoryMapFileAccess(fc, flen, mapioBufSize, context.getLog()); |
| 97 } else { | 97 } else { |
| 98 // XXX once implementation is more or less stable, | 98 // XXX once implementation is more or less stable, |
| 99 // may want to try ByteBuffer.allocateDirect() to see | 99 // may want to try ByteBuffer.allocateDirect() to see |
