This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-net.git
commit f019babad7c4d48f96ef9545d15f9211b05b26df Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sat May 11 17:36:04 2024 -0400 [SpotBugs] Make explicit use of the default encoding Remove unused imports --- .../commons/net/examples/ftp/TFTPExample.java | 6 ---- .../commons/net/examples/mail/IMAPExportMbox.java | 32 ++++++++++------- .../commons/net/examples/mail/IMAPImportMbox.java | 42 +++++++++++----------- .../apache/commons/net/examples/mail/POP3Mail.java | 4 +-- .../apache/commons/net/examples/mail/SMTPMail.java | 13 +++---- .../apache/commons/net/examples/mail/Utils.java | 3 +- .../commons/net/examples/nntp/ArticleReader.java | 4 +-- .../commons/net/examples/nntp/ExtendedNNTPOps.java | 4 +-- .../net/examples/nntp/MessageThreading.java | 4 +-- .../commons/net/examples/nntp/PostMessage.java | 14 ++++---- .../net/examples/telnet/TelnetClientExample.java | 28 ++++++++------- .../apache/commons/net/examples/unix/chargen.java | 3 +- .../apache/commons/net/tftp/TFTPErrorPacket.java | 5 +-- .../apache/commons/net/tftp/TFTPRequestPacket.java | 5 +-- 14 files changed, 88 insertions(+), 79 deletions(-) diff --git a/src/main/java/org/apache/commons/net/examples/ftp/TFTPExample.java b/src/main/java/org/apache/commons/net/examples/ftp/TFTPExample.java index a76d0820..121d9ade 100644 --- a/src/main/java/org/apache/commons/net/examples/ftp/TFTPExample.java +++ b/src/main/java/org/apache/commons/net/examples/ftp/TFTPExample.java @@ -159,15 +159,12 @@ public final class TFTPExample { final boolean closed; FileOutputStream output; final File file; - file = new File(localFilename); - // If file exists, don't overwrite it. if (file.exists()) { System.err.println("Error: " + localFilename + " already exists."); return false; } - // Try to open local file for writing try { output = new FileOutputStream(file); @@ -175,9 +172,7 @@ public final class TFTPExample { tftp.close(); throw new IOException("Error: could not open local file for writing.", e); } - open(tftp); - // Try to receive remote file via TFTP try { final String[] parts = hostname.split(":"); @@ -198,7 +193,6 @@ public final class TFTPExample { // Close local socket and output file closed = close(tftp, output); } - return closed; } diff --git a/src/main/java/org/apache/commons/net/examples/mail/IMAPExportMbox.java b/src/main/java/org/apache/commons/net/examples/mail/IMAPExportMbox.java index 18cfa9cc..ac13a96f 100644 --- a/src/main/java/org/apache/commons/net/examples/mail/IMAPExportMbox.java +++ b/src/main/java/org/apache/commons/net/examples/mail/IMAPExportMbox.java @@ -18,12 +18,15 @@ package org.apache.commons.net.examples.mail; import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; import java.io.IOException; import java.io.UncheckedIOException; import java.net.URI; import java.net.URISyntaxException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -318,20 +321,23 @@ public final class IMAPExportMbox { if (file.equals("-")) { mboxListener = null; } else if (file.startsWith("+")) { - final File mbox = new File(file.substring(1)); - System.out.println("Appending to file " + mbox); - mboxListener = new MboxListener(new BufferedWriter(new FileWriter(mbox, true)), eol, printHash, printMarker, checkSequence); + final Path mboxPath = Paths.get(file.substring(1)); + System.out.println("Appending to file " + mboxPath); + mboxListener = new MboxListener(Files.newBufferedWriter(mboxPath, Charset.defaultCharset(), StandardOpenOption.CREATE, StandardOpenOption.APPEND), + eol, printHash, printMarker, checkSequence); } else if (file.startsWith("-")) { - final File mbox = new File(file.substring(1)); - System.out.println("Writing to file " + mbox); - mboxListener = new MboxListener(new BufferedWriter(new FileWriter(mbox, false)), eol, printHash, printMarker, checkSequence); + final Path mboxPath = Paths.get(file.substring(1)); + System.out.println("Writing to file " + mboxPath); + mboxListener = new MboxListener(Files.newBufferedWriter(mboxPath, Charset.defaultCharset(), StandardOpenOption.CREATE), eol, printHash, printMarker, + checkSequence); } else { - final File mboxFile = new File(file); - if (mboxFile.exists() && mboxFile.length() > 0) { - throw new IOException("mailbox file: " + mboxFile + " already exists and is non-empty!"); + final Path mboxPath = Paths.get(file); + if (Files.exists(mboxPath) && Files.size(mboxPath) > 0) { + throw new IOException("mailbox file: " + mboxPath + " already exists and is non-empty!"); } - System.out.println("Creating file " + mboxFile); - mboxListener = new MboxListener(new BufferedWriter(new FileWriter(mboxFile)), eol, printHash, printMarker, checkSequence); + System.out.println("Creating file " + mboxPath); + mboxListener = new MboxListener(Files.newBufferedWriter(mboxPath, Charset.defaultCharset(), StandardOpenOption.CREATE), eol, printHash, printMarker, + checkSequence); } final String path = uri.getPath(); diff --git a/src/main/java/org/apache/commons/net/examples/mail/IMAPImportMbox.java b/src/main/java/org/apache/commons/net/examples/mail/IMAPImportMbox.java index 3c12ee0c..645bce81 100644 --- a/src/main/java/org/apache/commons/net/examples/mail/IMAPImportMbox.java +++ b/src/main/java/org/apache/commons/net/examples/mail/IMAPImportMbox.java @@ -19,9 +19,11 @@ package org.apache.commons.net.examples.mail; import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.net.URI; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.BitSet; import java.util.List; @@ -133,30 +135,28 @@ public final class IMAPImportMbox { int loaded = 0; try { imap.setSoTimeout(6000); - - final BufferedReader br = new BufferedReader(new FileReader(file)); // TODO charset? - - String line; - final StringBuilder sb = new StringBuilder(); boolean wanted = false; // Skip any leading rubbish - while ((line = br.readLine()) != null) { - if (line.startsWith("From ")) { // start of message; i.e. end of previous (if any) - if (process(sb, imap, folder, total)) { // process previous message (if any) - loaded++; + final StringBuilder sb = new StringBuilder(); + try (BufferedReader br = Files.newBufferedReader(Paths.get(file), Charset.defaultCharset())) { + String line; + while ((line = br.readLine()) != null) { + if (line.startsWith("From ")) { // start of message; i.e. end of previous (if any) + if (process(sb, imap, folder, total)) { // process previous message (if any) + loaded++; + } + sb.setLength(0); + total++; + wanted = wanted(total, line, msgNums, contains); + } else if (startsWith(line, PATFROM)) { // Unescape ">+From " in body text + line = line.substring(1); + } + // TODO process first Received: line to determine arrival date? + if (wanted) { + sb.append(line); + sb.append(CRLF); } - sb.setLength(0); - total++; - wanted = wanted(total, line, msgNums, contains); - } else if (startsWith(line, PATFROM)) { // Unescape ">+From " in body text - line = line.substring(1); - } - // TODO process first Received: line to determine arrival date? - if (wanted) { - sb.append(line); - sb.append(CRLF); } } - br.close(); if (wanted && process(sb, imap, folder, total)) { // last message (if any) loaded++; } diff --git a/src/main/java/org/apache/commons/net/examples/mail/POP3Mail.java b/src/main/java/org/apache/commons/net/examples/mail/POP3Mail.java index 5a60e4e1..25075228 100644 --- a/src/main/java/org/apache/commons/net/examples/mail/POP3Mail.java +++ b/src/main/java/org/apache/commons/net/examples/mail/POP3Mail.java @@ -19,10 +19,10 @@ package org.apache.commons.net.examples.mail; import java.io.BufferedReader; import java.io.IOException; -import java.io.PrintWriter; import java.util.Locale; import org.apache.commons.net.PrintCommandListener; +import org.apache.commons.net.io.Util; import org.apache.commons.net.pop3.POP3Client; import org.apache.commons.net.pop3.POP3MessageInfo; import org.apache.commons.net.pop3.POP3SClient; @@ -77,7 +77,7 @@ public final class POP3Mail { pop3.setDefaultTimeout(60000); // suppress login details - pop3.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); + pop3.addProtocolCommandListener(new PrintCommandListener(Util.newPrintWriter(System.out), true)); try { pop3.connect(server); diff --git a/src/main/java/org/apache/commons/net/examples/mail/SMTPMail.java b/src/main/java/org/apache/commons/net/examples/mail/SMTPMail.java index 366c7b48..3c699a99 100644 --- a/src/main/java/org/apache/commons/net/examples/mail/SMTPMail.java +++ b/src/main/java/org/apache/commons/net/examples/mail/SMTPMail.java @@ -19,11 +19,12 @@ package org.apache.commons.net.examples.mail; import java.io.BufferedReader; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; -import java.io.PrintWriter; import java.io.Writer; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; @@ -49,7 +50,7 @@ public final class SMTPMail { String cc; final List<String> ccList = new ArrayList<>(); final BufferedReader stdin; - FileReader fileReader = null; + BufferedReader fileReader = null; final Writer writer; final SimpleSMTPHeader header; final SMTPClient client; @@ -61,7 +62,7 @@ public final class SMTPMail { server = args[0]; - stdin = new BufferedReader(new InputStreamReader(System.in)); + stdin = new BufferedReader(new InputStreamReader(System.in, Charset.defaultCharset())); try { System.out.print("From: "); @@ -101,13 +102,13 @@ public final class SMTPMail { fileName = stdin.readLine(); try { - fileReader = new FileReader(fileName); + fileReader = Files.newBufferedReader(Paths.get(fileName), Charset.defaultCharset()); } catch (final FileNotFoundException e) { System.err.println("File not found. " + e.getMessage()); } client = new SMTPClient(); - client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); + client.addProtocolCommandListener(new PrintCommandListener(Util.newPrintWriter(System.out), true)); client.connect(server); diff --git a/src/main/java/org/apache/commons/net/examples/mail/Utils.java b/src/main/java/org/apache/commons/net/examples/mail/Utils.java index 5a41d4de..55ea94f1 100644 --- a/src/main/java/org/apache/commons/net/examples/mail/Utils.java +++ b/src/main/java/org/apache/commons/net/examples/mail/Utils.java @@ -21,6 +21,7 @@ import java.io.BufferedReader; import java.io.Console; import java.io.IOException; import java.io.InputStreamReader; +import java.nio.charset.Charset; import java.util.Locale; /** @@ -40,7 +41,7 @@ final class Utils { */ static String getPassword(final String user, String password) throws IOException { if ("-".equals(password)) { // stdin - final BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + final BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Charset.defaultCharset())); password = in.readLine(); } else if ("*".equals(password)) { // console final Console con = System.console(); // Java 1.6 diff --git a/src/main/java/org/apache/commons/net/examples/nntp/ArticleReader.java b/src/main/java/org/apache/commons/net/examples/nntp/ArticleReader.java index 7f8a1e55..b7872a0f 100644 --- a/src/main/java/org/apache/commons/net/examples/nntp/ArticleReader.java +++ b/src/main/java/org/apache/commons/net/examples/nntp/ArticleReader.java @@ -19,10 +19,10 @@ package org.apache.commons.net.examples.nntp; import java.io.BufferedReader; import java.io.IOException; -import java.io.PrintWriter; import java.net.SocketException; import org.apache.commons.net.PrintCommandListener; +import org.apache.commons.net.io.Util; import org.apache.commons.net.nntp.NNTPClient; import org.apache.commons.net.nntp.NewsgroupInfo; @@ -44,7 +44,7 @@ public class ArticleReader { final String articleSpec = args.length >= 3 ? args[2] : null; final NNTPClient client = new NNTPClient(); - client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); + client.addProtocolCommandListener(new PrintCommandListener(Util.newPrintWriter(System.out), true)); client.connect(hostname); if (args.length == 5) { // Optional auth diff --git a/src/main/java/org/apache/commons/net/examples/nntp/ExtendedNNTPOps.java b/src/main/java/org/apache/commons/net/examples/nntp/ExtendedNNTPOps.java index c36f050f..94523dbd 100644 --- a/src/main/java/org/apache/commons/net/examples/nntp/ExtendedNNTPOps.java +++ b/src/main/java/org/apache/commons/net/examples/nntp/ExtendedNNTPOps.java @@ -18,9 +18,9 @@ package org.apache.commons.net.examples.nntp; import java.io.IOException; -import java.io.PrintWriter; import org.apache.commons.net.PrintCommandListener; +import org.apache.commons.net.io.Util; import org.apache.commons.net.nntp.Article; import org.apache.commons.net.nntp.NNTPClient; import org.apache.commons.net.nntp.NewsgroupInfo; @@ -47,7 +47,7 @@ public class ExtendedNNTPOps { public ExtendedNNTPOps() { client = new NNTPClient(); - client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); + client.addProtocolCommandListener(new PrintCommandListener(Util.newPrintWriter(System.out), true)); } private void demo(final String host, final String user, final String password) { diff --git a/src/main/java/org/apache/commons/net/examples/nntp/MessageThreading.java b/src/main/java/org/apache/commons/net/examples/nntp/MessageThreading.java index 54a5653e..7711f69c 100644 --- a/src/main/java/org/apache/commons/net/examples/nntp/MessageThreading.java +++ b/src/main/java/org/apache/commons/net/examples/nntp/MessageThreading.java @@ -18,10 +18,10 @@ package org.apache.commons.net.examples.nntp; import java.io.IOException; -import java.io.PrintWriter; import java.net.SocketException; import org.apache.commons.net.PrintCommandListener; +import org.apache.commons.net.io.Util; import org.apache.commons.net.nntp.Article; import org.apache.commons.net.nntp.NNTPClient; import org.apache.commons.net.nntp.NewsgroupInfo; @@ -42,7 +42,7 @@ public class MessageThreading { final String newsgroup = args[1]; final NNTPClient client = new NNTPClient(); - client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); + client.addProtocolCommandListener(new PrintCommandListener(Util.newPrintWriter(System.out), true)); client.connect(hostname); if (args.length == 4) { // Optional auth diff --git a/src/main/java/org/apache/commons/net/examples/nntp/PostMessage.java b/src/main/java/org/apache/commons/net/examples/nntp/PostMessage.java index 9b2f7168..38e3cda1 100644 --- a/src/main/java/org/apache/commons/net/examples/nntp/PostMessage.java +++ b/src/main/java/org/apache/commons/net/examples/nntp/PostMessage.java @@ -19,11 +19,13 @@ package org.apache.commons.net.examples.nntp; import java.io.BufferedReader; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; -import java.io.PrintWriter; +import java.io.Reader; import java.io.Writer; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; import org.apache.commons.net.PrintCommandListener; import org.apache.commons.net.io.Util; @@ -47,7 +49,7 @@ public final class PostMessage { final String organization; final String references; final BufferedReader stdin; - FileReader fileReader = null; + Reader fileReader = null; final SimpleNNTPHeader header; final NNTPClient client; @@ -58,7 +60,7 @@ public final class PostMessage { server = args[0]; - stdin = new BufferedReader(new InputStreamReader(System.in)); + stdin = new BufferedReader(new InputStreamReader(System.in, Charset.defaultCharset())); try { System.out.print("From: "); @@ -123,14 +125,14 @@ public final class PostMessage { fileName = stdin.readLine(); try { - fileReader = new FileReader(fileName); + fileReader = Files.newBufferedReader(Paths.get(fileName), Charset.defaultCharset()); } catch (final FileNotFoundException e) { System.err.println("File not found. " + e.getMessage()); System.exit(1); } client = new NNTPClient(); - client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); + client.addProtocolCommandListener(new PrintCommandListener(Util.newPrintWriter(System.out), true)); client.connect(server); diff --git a/src/main/java/org/apache/commons/net/examples/telnet/TelnetClientExample.java b/src/main/java/org/apache/commons/net/examples/telnet/TelnetClientExample.java index 1bfda6ea..1c315a66 100644 --- a/src/main/java/org/apache/commons/net/examples/telnet/TelnetClientExample.java +++ b/src/main/java/org/apache/commons/net/examples/telnet/TelnetClientExample.java @@ -21,6 +21,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.charset.Charset; import java.time.Duration; import java.util.StringTokenizer; @@ -106,13 +107,14 @@ public class TelnetClientExample implements Runnable, TelnetNotificationHandler final OutputStream outstr = tc.getOutputStream(); final byte[] buff = new byte[1024]; - int ret_read = 0; + int readCount = 0; do { try { - ret_read = System.in.read(buff); - if (ret_read > 0) { - final String line = new String(buff, 0, ret_read); // deliberate use of default charset + readCount = System.in.read(buff); + if (readCount > 0) { + final Charset charset = Charset.defaultCharset(); + final String line = new String(buff, 0, readCount, charset); // deliberate use of default charset if (line.startsWith("AYT")) { try { System.out.println("Sending AYT"); @@ -128,7 +130,7 @@ public class TelnetClientExample implements Runnable, TelnetNotificationHandler + tc.getRemoteOptionState(ii)); } } else if (line.startsWith("REGISTER")) { - final StringTokenizer st = new StringTokenizer(new String(buff)); + final StringTokenizer st = new StringTokenizer(new String(buff, charset)); try { st.nextToken(); final int opcode = Integer.parseInt(st.nextToken()); @@ -149,7 +151,7 @@ public class TelnetClientExample implements Runnable, TelnetNotificationHandler } } } else if (line.startsWith("UNREGISTER")) { - final StringTokenizer st = new StringTokenizer(new String(buff)); + final StringTokenizer st = new StringTokenizer(new String(buff, charset)); try { st.nextToken(); final int opcode = Integer.parseInt(st.nextToken()); @@ -177,7 +179,7 @@ public class TelnetClientExample implements Runnable, TelnetNotificationHandler outstr.flush(); } else { try { - outstr.write(buff, 0, ret_read); + outstr.write(buff, 0, readCount); outstr.flush(); } catch (final IOException e) { end_loop = true; @@ -188,7 +190,7 @@ public class TelnetClientExample implements Runnable, TelnetNotificationHandler System.err.println("Exception while reading keyboard:" + e.getMessage()); end_loop = true; } - } while (ret_read > 0 && !end_loop); + } while (readCount > 0 && !end_loop); try { tc.disconnect(); @@ -243,14 +245,14 @@ public class TelnetClientExample implements Runnable, TelnetNotificationHandler try { final byte[] buff = new byte[1024]; - int ret_read = 0; + int readCount = 0; do { - ret_read = instr.read(buff); - if (ret_read > 0) { - System.out.print(new String(buff, 0, ret_read)); + readCount = instr.read(buff); + if (readCount > 0) { + System.out.print(new String(buff, 0, readCount, Charset.defaultCharset())); } - } while (ret_read >= 0); + } while (readCount >= 0); } catch (final IOException e) { System.err.println("Exception while reading socket:" + e.getMessage()); } diff --git a/src/main/java/org/apache/commons/net/examples/unix/chargen.java b/src/main/java/org/apache/commons/net/examples/unix/chargen.java index cbefbddb..928dfda6 100644 --- a/src/main/java/org/apache/commons/net/examples/unix/chargen.java +++ b/src/main/java/org/apache/commons/net/examples/unix/chargen.java @@ -23,6 +23,7 @@ import java.io.InputStreamReader; import java.io.InterruptedIOException; import java.net.InetAddress; import java.net.SocketException; +import java.nio.charset.Charset; import java.time.Duration; import org.apache.commons.net.chargen.CharGenTCPClient; @@ -45,7 +46,7 @@ public final class chargen { // We want to timeout if a response takes longer than 60 seconds client.setDefaultTimeout(60000); client.connect(host); - try (final BufferedReader chargenInput = new BufferedReader(new InputStreamReader(client.getInputStream()))) { + try (final BufferedReader chargenInput = new BufferedReader(new InputStreamReader(client.getInputStream(), Charset.defaultCharset()))) { // We assume the chargen service outputs lines, but it really doesn't // have to, so this code might actually not work if no newlines are diff --git a/src/main/java/org/apache/commons/net/tftp/TFTPErrorPacket.java b/src/main/java/org/apache/commons/net/tftp/TFTPErrorPacket.java index 02d420ca..60ca88a4 100644 --- a/src/main/java/org/apache/commons/net/tftp/TFTPErrorPacket.java +++ b/src/main/java/org/apache/commons/net/tftp/TFTPErrorPacket.java @@ -19,6 +19,7 @@ package org.apache.commons.net.tftp; import java.net.DatagramPacket; import java.net.InetAddress; +import java.nio.charset.Charset; /** * A final class derived from TFTPPacket defining the TFTP Error packet type. @@ -157,7 +158,7 @@ public final class TFTPErrorPacket extends TFTPPacket { data[2] = (byte) ((error & 0xffff) >> 8); data[3] = (byte) (error & 0xff); - System.arraycopy(message.getBytes(), 0, data, 4, length); + System.arraycopy(message.getBytes(Charset.defaultCharset()), 0, data, 4, length); data[length + 4] = 0; @@ -183,7 +184,7 @@ public final class TFTPErrorPacket extends TFTPPacket { data[2] = (byte) ((error & 0xffff) >> 8); data[3] = (byte) (error & 0xff); - System.arraycopy(message.getBytes(), 0, data, 4, length); + System.arraycopy(message.getBytes(Charset.defaultCharset()), 0, data, 4, length); data[length + 4] = 0; diff --git a/src/main/java/org/apache/commons/net/tftp/TFTPRequestPacket.java b/src/main/java/org/apache/commons/net/tftp/TFTPRequestPacket.java index 1452e3df..64ec423c 100644 --- a/src/main/java/org/apache/commons/net/tftp/TFTPRequestPacket.java +++ b/src/main/java/org/apache/commons/net/tftp/TFTPRequestPacket.java @@ -19,6 +19,7 @@ package org.apache.commons.net.tftp; import java.net.DatagramPacket; import java.net.InetAddress; +import java.nio.charset.Charset; /** * An abstract class derived from TFTPPacket definiing a TFTP Request packet type. It is subclassed by the @@ -169,7 +170,7 @@ public abstract class TFTPRequestPacket extends TFTPPacket { data = new byte[fileLength + modeLength + 4]; data[0] = 0; data[1] = (byte) type; - System.arraycopy(fileName.getBytes(), 0, data, 2, fileLength); + System.arraycopy(fileName.getBytes(Charset.defaultCharset()), 0, data, 2, fileLength); data[fileLength + 2] = 0; System.arraycopy(modeBytes[mode], 0, data, fileLength + 3, modeLength); @@ -194,7 +195,7 @@ public abstract class TFTPRequestPacket extends TFTPPacket { data[0] = 0; data[1] = (byte) type; - System.arraycopy(fileName.getBytes(), 0, data, 2, fileLength); + System.arraycopy(fileName.getBytes(Charset.defaultCharset()), 0, data, 2, fileLength); data[fileLength + 2] = 0; System.arraycopy(modeBytes[mode], 0, data, fileLength + 3, modeLength);