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 |