Added Binary formater for human string output
This commit is contained in:
parent
1bd1c98858
commit
d713c74832
5 changed files with 114 additions and 59 deletions
|
|
@ -22,6 +22,8 @@
|
||||||
|
|
||||||
package zutil;
|
package zutil;
|
||||||
|
|
||||||
|
import zutil.converters.Converter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a class whit utility methods.
|
* This is a class whit utility methods.
|
||||||
*
|
*
|
||||||
|
|
@ -33,10 +35,10 @@ public class StringUtil {
|
||||||
/**
|
/**
|
||||||
* Present a size (in bytes) as a human-readable value
|
* Present a size (in bytes) as a human-readable value
|
||||||
*
|
*
|
||||||
* @param size size (in bytes)
|
* @param bytes size (in bytes)
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static String formatBytesToString(long bytes){
|
public static String formatByteSizeToString(long bytes){
|
||||||
int total = sizes.length-1;
|
int total = sizes.length-1;
|
||||||
double value = bytes;
|
double value = bytes;
|
||||||
|
|
||||||
|
|
@ -155,4 +157,54 @@ public class StringUtil {
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Presents a binary array in HEX and ASCII
|
||||||
|
*
|
||||||
|
* @param data The source binary data to format
|
||||||
|
* @return A multiline String with human readable HEX and ASCII
|
||||||
|
*/
|
||||||
|
public static String formatBytesToString(byte[] data){
|
||||||
|
StringBuffer output = new StringBuffer();
|
||||||
|
|
||||||
|
//000 XX XX XX XX XX XX XX XX '........'
|
||||||
|
int maxOffset = (""+data.length).length();
|
||||||
|
for(int offset=0; offset<data.length; offset+=8){
|
||||||
|
if(offset != 0)
|
||||||
|
output.append('\n');
|
||||||
|
|
||||||
|
// Offset
|
||||||
|
String offsetStr = ""+offset;
|
||||||
|
for(int i=offsetStr.length(); i<3 || i<maxOffset; ++i){
|
||||||
|
output.append('0');
|
||||||
|
}
|
||||||
|
output.append(offsetStr);
|
||||||
|
output.append(" ");
|
||||||
|
|
||||||
|
// HEX
|
||||||
|
for(int i=0; i<8; ++i){
|
||||||
|
if(offset+i < data.length)
|
||||||
|
output.append(Converter.toHexString(data[offset+i]));
|
||||||
|
else
|
||||||
|
output.append(" ");
|
||||||
|
output.append(' ');
|
||||||
|
}
|
||||||
|
output.append(' ');
|
||||||
|
|
||||||
|
// ACII
|
||||||
|
output.append('\'');
|
||||||
|
for(int i=0; i<8; ++i){
|
||||||
|
if(offset+i < data.length)
|
||||||
|
if( 32 <= data[offset+i] && data[offset+i] <= 126 )
|
||||||
|
output.append((char)data[offset+i]);
|
||||||
|
else
|
||||||
|
output.append('.');
|
||||||
|
else
|
||||||
|
output.append(' ');
|
||||||
|
}
|
||||||
|
output.append('\'');
|
||||||
|
}
|
||||||
|
|
||||||
|
return output.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,35 +22,10 @@
|
||||||
|
|
||||||
package zutil.jee.upload;
|
package zutil.jee.upload;
|
||||||
|
|
||||||
import java.io.File;
|
import org.apache.commons.fileupload.*;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import javax.servlet.ServletConfig;
|
|
||||||
import javax.servlet.ServletException;
|
|
||||||
import javax.servlet.http.HttpServlet;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import javax.servlet.http.HttpSession;
|
|
||||||
|
|
||||||
import org.apache.commons.fileupload.FileItem;
|
|
||||||
import org.apache.commons.fileupload.FileItemHeaders;
|
|
||||||
import org.apache.commons.fileupload.FileItemHeadersSupport;
|
|
||||||
import org.apache.commons.fileupload.FileItemIterator;
|
|
||||||
import org.apache.commons.fileupload.FileItemStream;
|
|
||||||
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
||||||
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
||||||
import org.apache.commons.fileupload.util.Streams;
|
import org.apache.commons.fileupload.util.Streams;
|
||||||
|
|
||||||
import zutil.StringUtil;
|
import zutil.StringUtil;
|
||||||
import zutil.io.file.FileUtil;
|
import zutil.io.file.FileUtil;
|
||||||
import zutil.jee.upload.FileUploadListener.Status;
|
import zutil.jee.upload.FileUploadListener.Status;
|
||||||
|
|
@ -59,6 +34,19 @@ import zutil.parser.DataNode;
|
||||||
import zutil.parser.DataNode.DataType;
|
import zutil.parser.DataNode.DataType;
|
||||||
import zutil.parser.json.JSONWriter;
|
import zutil.parser.json.JSONWriter;
|
||||||
|
|
||||||
|
import javax.servlet.ServletConfig;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <XMP>
|
* <XMP>
|
||||||
* Example web.xml:
|
* Example web.xml:
|
||||||
|
|
@ -240,7 +228,7 @@ public abstract class AjaxFileUpload extends HttpServlet {
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
files.add( fileItem );
|
files.add( fileItem );
|
||||||
logger.info("Recieved file: "+fileItem.getName()+" ("+StringUtil.formatBytesToString( fileItem.getSize() )+")");
|
logger.info("Recieved file: "+fileItem.getName()+" ("+StringUtil.formatByteSizeToString(fileItem.getSize())+")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Process the upload
|
// Process the upload
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@
|
||||||
package zutil.jee.upload;
|
package zutil.jee.upload;
|
||||||
|
|
||||||
import org.apache.commons.fileupload.ProgressListener;
|
import org.apache.commons.fileupload.ProgressListener;
|
||||||
|
|
||||||
import zutil.StringUtil;
|
import zutil.StringUtil;
|
||||||
import zutil.parser.DataNode;
|
import zutil.parser.DataNode;
|
||||||
import zutil.parser.DataNode.DataType;
|
import zutil.parser.DataNode.DataType;
|
||||||
|
|
@ -152,9 +151,9 @@ public class FileUploadListener implements ProgressListener{
|
||||||
node.set("filename", filename);
|
node.set("filename", filename);
|
||||||
node.set("percent", getPercentComplete());
|
node.set("percent", getPercentComplete());
|
||||||
|
|
||||||
node.set("uploaded", StringUtil.formatBytesToString( bytes ));
|
node.set("uploaded", StringUtil.formatByteSizeToString(bytes));
|
||||||
node.set("total", StringUtil.formatBytesToString( length ));
|
node.set("total", StringUtil.formatByteSizeToString(length));
|
||||||
node.set("speed", StringUtil.formatBytesToString( speed )+"/s");
|
node.set("speed", StringUtil.formatByteSizeToString(speed)+"/s");
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,25 +22,17 @@
|
||||||
|
|
||||||
package zutil.net.update;
|
package zutil.net.update;
|
||||||
|
|
||||||
import java.awt.EventQueue;
|
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.border.EmptyBorder;
|
|
||||||
import javax.swing.GroupLayout;
|
|
||||||
import javax.swing.GroupLayout.Alignment;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.JProgressBar;
|
|
||||||
import javax.swing.LayoutStyle.ComponentPlacement;
|
|
||||||
import javax.swing.SwingConstants;
|
|
||||||
import javax.swing.JSeparator;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
|
|
||||||
import zutil.ProgressListener;
|
import zutil.ProgressListener;
|
||||||
import zutil.StringUtil;
|
import zutil.StringUtil;
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.ActionEvent;
|
import javax.swing.*;
|
||||||
|
import javax.swing.GroupLayout.Alignment;
|
||||||
|
import javax.swing.LayoutStyle.ComponentPlacement;
|
||||||
|
import javax.swing.border.EmptyBorder;
|
||||||
import java.awt.Dialog.ModalExclusionType;
|
import java.awt.Dialog.ModalExclusionType;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
|
||||||
public class Zupdater extends JFrame implements ProgressListener<UpdateClient, FileInfo>{
|
public class Zupdater extends JFrame implements ProgressListener<UpdateClient, FileInfo>{
|
||||||
|
|
@ -71,10 +63,10 @@ public class Zupdater extends JFrame implements ProgressListener<UpdateClient, F
|
||||||
public void progressUpdate(UpdateClient source, FileInfo info, double percent) {
|
public void progressUpdate(UpdateClient source, FileInfo info, double percent) {
|
||||||
lblFile.setText( info.getPath() );
|
lblFile.setText( info.getPath() );
|
||||||
progressBar.setValue( (int)percent );
|
progressBar.setValue( (int)percent );
|
||||||
progressBar.setString( StringUtil.formatBytesToString( source.getTotalReceived() ) +
|
progressBar.setString( StringUtil.formatByteSizeToString(source.getTotalReceived()) +
|
||||||
" / "+StringUtil.formatBytesToString( source.getTotalSize() ));
|
" / "+StringUtil.formatByteSizeToString(source.getTotalSize()));
|
||||||
|
|
||||||
lblSpeed.setText( StringUtil.formatBytesToString(((UpdateClient)source).getSpeed())+"/s" );
|
lblSpeed.setText( StringUtil.formatByteSizeToString(((UpdateClient) source).getSpeed())+"/s" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,17 +22,17 @@
|
||||||
|
|
||||||
package zutil.test;
|
package zutil.test;
|
||||||
|
|
||||||
import org.junit.*;
|
import org.junit.Test;
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
import zutil.StringUtil;
|
import zutil.StringUtil;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
public class StringUtilTest {
|
public class StringUtilTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void formatBytesToStringTest() {
|
public void formatByteSizeToStringTest() {
|
||||||
assertEquals( "100.0 B", StringUtil.formatBytesToString( 100 ) );
|
assertEquals( "100.0 B", StringUtil.formatByteSizeToString(100) );
|
||||||
assertEquals( "9.7 kB", StringUtil.formatBytesToString( 10000 ) );
|
assertEquals( "9.7 kB", StringUtil.formatByteSizeToString(10000) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -65,4 +65,28 @@ public class StringUtilTest {
|
||||||
assertEquals( "aa\"", StringUtil.trimQuotes("aa\"") );
|
assertEquals( "aa\"", StringUtil.trimQuotes("aa\"") );
|
||||||
assertEquals( "aa", StringUtil.trimQuotes("\"aa\"") );
|
assertEquals( "aa", StringUtil.trimQuotes("\"aa\"") );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void formatBytesToStringTest(){
|
||||||
|
byte[] data = new byte[1];
|
||||||
|
assertEquals("000 00 '. '",
|
||||||
|
StringUtil.formatBytesToString(data));
|
||||||
|
|
||||||
|
data[0] = 65;
|
||||||
|
assertEquals("000 41 'A '",
|
||||||
|
StringUtil.formatBytesToString(data));
|
||||||
|
|
||||||
|
byte[] data2 = new byte[8];
|
||||||
|
data2[4] = 65;
|
||||||
|
assertEquals("000 00 00 00 00 41 00 00 00 '....A...'",
|
||||||
|
StringUtil.formatBytesToString(data2));
|
||||||
|
|
||||||
|
byte[] data3 = new byte[32];
|
||||||
|
data3[4] = 65;
|
||||||
|
assertEquals("000 00 00 00 00 41 00 00 00 '....A...'\n"+
|
||||||
|
"008 00 00 00 00 00 00 00 00 '........'\n"+
|
||||||
|
"016 00 00 00 00 00 00 00 00 '........'\n"+
|
||||||
|
"024 00 00 00 00 00 00 00 00 '........'",
|
||||||
|
StringUtil.formatBytesToString(data3));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue