code: public static void splitBySize(final File file, final long sizeOfPart, final File destDir) throws UncheckedIOException {
          final int numOfParts = (int) ((file.length() % sizeOfPart) == 0 ? (file.length() / sizeOfPart) : (file.length() / sizeOfPart) + 1);
  
          final String fileName = file.getName();
          final long fileLength = file.length();
          int fileSerNum = 1;
  
          final byte[] buf = Objectory.createByteArrayBuffer();
          InputStream input = null;
          OutputStream output = null;
          try {
              input = new FileInputStream(file);
  
              for (int i = 0; i < numOfParts; i++) {
                  String subFileNmae = destDir.getAbsolutePath() + IOUtil.FILE_SEPARATOR + fileName + "_" + StringUtil.padStart(N.stringOf(fileSerNum++), 4, '0');
                  output = new FileOutputStream(new File(subFileNmae));
                  long partLength = sizeOfPart;
  
                  if (i == numOfParts - 1) {
                      partLength += fileLength % numOfParts;
                  }
  
                  int count = 0;
  
                  try {
                      while (partLength > 0 && EOF != (count = read(input, buf, 0, (int) Math.min(buf.length, partLength)))) {
                          output.write(buf, 0, count);
  
                          partLength = partLength - count;
                      }
  
                      output.flush();
                  } finally {
                      close(output);
                  }
              }
          } catch (IOException e) {
              throw new UncheckedIOException(e);
          } finally {
              Objectory.recycle(buf);
  
              closeQuietly(input);
          }
      }
docs: Mostly it's designed for (zipped/unzipped/log) text files.
  
  @param file
  @param sizeOfPart
  @param destDir