annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fileIO/ByteFile.java @ 68:5028fdace37b

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 16:23:26 -0400
parents
children
rev   line source
jpayne@68 1 package fileIO;
jpayne@68 2 import java.io.File;
jpayne@68 3 import java.io.InputStream;
jpayne@68 4 import java.util.ArrayList;
jpayne@68 5
jpayne@68 6 import shared.Shared;
jpayne@68 7 import structures.ListNum;
jpayne@68 8
jpayne@68 9
jpayne@68 10 public abstract class ByteFile {
jpayne@68 11
jpayne@68 12 // public static final ByteFile makeByteFile(String fname){
jpayne@68 13 // return makeByteFile(fname, false, true);
jpayne@68 14 // }
jpayne@68 15
jpayne@68 16 public static final ByteFile makeByteFile1(String fname, boolean allowSubprocess){
jpayne@68 17 FileFormat ff=FileFormat.testInput(fname, FileFormat.TEXT, null, allowSubprocess, false);
jpayne@68 18 return new ByteFile1(ff);
jpayne@68 19 }
jpayne@68 20
jpayne@68 21 public static final ByteFile makeByteFile(String fname, boolean allowSubprocess){
jpayne@68 22 FileFormat ff=FileFormat.testInput(fname, FileFormat.TEXT, null, allowSubprocess, false);
jpayne@68 23 return makeByteFile(ff);
jpayne@68 24 }
jpayne@68 25
jpayne@68 26 public static final ByteFile makeByteFile(FileFormat ff){
jpayne@68 27 return makeByteFile(ff, 0);
jpayne@68 28 }
jpayne@68 29
jpayne@68 30 public static final ByteFile makeByteFile(FileFormat ff, int type){
jpayne@68 31 if(type==1){return new ByteFile1(ff);}
jpayne@68 32 if(type==2){return new ByteFile2(ff);}
jpayne@68 33 if(!Shared.LOW_MEMORY && (FORCE_MODE_BF2 || (!FORCE_MODE_BF1 && Shared.threads()>4/* && (ReadWrite.isCompressed(fname) || ReadWrite.isSam(fname))*/))){
jpayne@68 34 // if(allowSubprocess && ((ReadWrite.USE_UNPIGZ || ReadWrite.USE_GUNZIP) && (fname.endsWith(".gz") || fname.endsWith(".gzip")))){}
jpayne@68 35 return new ByteFile2(ff);
jpayne@68 36 }
jpayne@68 37 // if(FORCE_MODE_BF3){return new QuickFile(ff);}
jpayne@68 38 return new ByteFile1(ff);
jpayne@68 39 }
jpayne@68 40
jpayne@68 41 protected ByteFile(FileFormat ff_){
jpayne@68 42 ff=ff_;
jpayne@68 43 assert(ff.read()) : ff;
jpayne@68 44 }
jpayne@68 45
jpayne@68 46 public final ArrayList<byte[]> toByteLines(){
jpayne@68 47
jpayne@68 48 byte[] s=null;
jpayne@68 49 ArrayList<byte[]> list=new ArrayList<byte[]>(4096);
jpayne@68 50
jpayne@68 51 for(s=nextLine(); s!=null; s=nextLine()){
jpayne@68 52 list.add(s);
jpayne@68 53 }
jpayne@68 54
jpayne@68 55 return list;
jpayne@68 56 }
jpayne@68 57
jpayne@68 58 public static final ArrayList<byte[]> toLines(FileFormat ff){
jpayne@68 59 ByteFile bf=makeByteFile(ff);
jpayne@68 60 ArrayList<byte[]> lines=bf.toByteLines();
jpayne@68 61 bf.close();
jpayne@68 62 return lines;
jpayne@68 63 }
jpayne@68 64
jpayne@68 65 public static final ArrayList<byte[]> toLines(String fname){
jpayne@68 66 FileFormat ff=FileFormat.testInput(fname, FileFormat.TEXT, null, true, false);
jpayne@68 67 return toLines(ff);
jpayne@68 68 }
jpayne@68 69
jpayne@68 70 public final long countLines(){
jpayne@68 71 byte[] s=null;
jpayne@68 72 long count=0;
jpayne@68 73 for(s=nextLine(); s!=null; s=nextLine()){count++;}
jpayne@68 74 reset();
jpayne@68 75
jpayne@68 76 return count;
jpayne@68 77 }
jpayne@68 78
jpayne@68 79 public abstract void reset();
jpayne@68 80 final void superReset(){
jpayne@68 81 nextID=0;
jpayne@68 82 }
jpayne@68 83
jpayne@68 84 public synchronized final ListNum<byte[]> nextList(){
jpayne@68 85 byte[] line=nextLine();
jpayne@68 86 if(line==null){return null;}
jpayne@68 87 ArrayList<byte[]> list=new ArrayList<byte[]>(200);
jpayne@68 88 list.add(line);
jpayne@68 89 for(int i=1; i<200; i++){
jpayne@68 90 line=nextLine();
jpayne@68 91 if(line==null){break;}
jpayne@68 92 list.add(line);
jpayne@68 93 }
jpayne@68 94 ListNum<byte[]> ln=new ListNum<byte[]>(list, nextID);
jpayne@68 95 nextID++;
jpayne@68 96 return ln;
jpayne@68 97 }
jpayne@68 98
jpayne@68 99 public final boolean exists(){
jpayne@68 100 return name().equals("stdin") || name().startsWith("stdin.") || name().startsWith("jar:") || new File(name()).exists(); //TODO Ugly and unsafe hack for files in jars
jpayne@68 101 }
jpayne@68 102
jpayne@68 103 public abstract InputStream is();
jpayne@68 104 public abstract long lineNum();
jpayne@68 105
jpayne@68 106 /** Returns true if there was an error */
jpayne@68 107 public abstract boolean close();
jpayne@68 108
jpayne@68 109 public abstract byte[] nextLine();
jpayne@68 110
jpayne@68 111 // public final void pushBack(byte[] line){
jpayne@68 112 // assert(pushBack==null);
jpayne@68 113 // pushBack=line;
jpayne@68 114 // }
jpayne@68 115
jpayne@68 116 public abstract void pushBack(byte[] line);
jpayne@68 117
jpayne@68 118 public abstract boolean isOpen();
jpayne@68 119
jpayne@68 120 public final String name(){return ff.name();}
jpayne@68 121 public final boolean allowSubprocess(){return ff.allowSubprocess();}
jpayne@68 122
jpayne@68 123 public final FileFormat ff;
jpayne@68 124
jpayne@68 125 /** Force usage of ByteFile1 */
jpayne@68 126 public static boolean FORCE_MODE_BF1=false;//!(Data.GENEPOOL || Data.DENOVO || Data.CORI || Shared.WINDOWS);
jpayne@68 127
jpayne@68 128 /** Force usage of ByteFile2 */
jpayne@68 129 public static boolean FORCE_MODE_BF2=false;
jpayne@68 130
jpayne@68 131 /** Unused */
jpayne@68 132 @Deprecated
jpayne@68 133 public static boolean FORCE_MODE_BF3=false;
jpayne@68 134
jpayne@68 135 protected final static byte slashr='\r', slashn='\n', carrot='>', plus='+', at='@';//, tab='\t';
jpayne@68 136
jpayne@68 137 // byte[] pushBack=null;
jpayne@68 138 private long nextID=0;
jpayne@68 139
jpayne@68 140 }