Write a function that converts the human readable memory representation to a long value in bytes. Please find the below table for the inputs and outputs.
Input |
Output (in bytes) |
10K |
10240 |
10M |
10485760 |
10G |
10737418240 |
10T |
10995116277760 |
10P |
11258999068426240 |
Find the
below working application.
MemorySizeToLongValue.java
package com.sample.app.strings;
public class MemorySizeToLongValue {
// Size in bytes
private static final long KILO_BYTE = 1024;
private static final long MEGA_BYTE = KILO_BYTE * 1024;
private static final long GIGA_BYTE = MEGA_BYTE * 1024;
private static final long TERA_BYTE = GIGA_BYTE * 1024;
private static final long PETA_BYTE = TERA_BYTE * 1024;
public static long toBytes(final String memorySize) throws Exception {
final String inputStr = memorySize.trim();
String memorySizeWithoutSign = null;
long sign = 1L;
char firstChar = memorySize.charAt(0);
switch (firstChar) {
case '+':
memorySizeWithoutSign = inputStr.substring(1);
break;
case '-':
sign = -1L;
memorySizeWithoutSign = inputStr.substring(1);
break;
default:
memorySizeWithoutSign = inputStr;
break;
}
// last character should be K, M, G, T, P.
long result = sign;
char lastChar = memorySizeWithoutSign.charAt(memorySizeWithoutSign.length() - 1);
switch (lastChar) {
case 'K':
result *= KILO_BYTE;
break;
case 'M':
result *= MEGA_BYTE;
break;
case 'G':
result *= GIGA_BYTE;
break;
case 'T':
result *= TERA_BYTE;
break;
case 'P':
result *= PETA_BYTE;
break;
default:
throw new IllegalArgumentException("Invalid input format. Valid values are : (10K, 10M, 10G, 10T, 10P)");
}
memorySizeWithoutSign = memorySizeWithoutSign.substring(0, memorySizeWithoutSign.length() - 1);
return result * Long.parseLong(memorySizeWithoutSign);
}
public static void main(String[] args) throws Exception {
System.out.println("10K : " + toBytes("10K") + " bytes");
System.out.println("10M : " + toBytes("10M") + " bytes");
System.out.println("10G : " + toBytes("10G") + " bytes");
System.out.println("10T : " + toBytes("10T") + " bytes");
System.out.println("10P : " + toBytes("10P") + " bytes\n");
System.out.println("+10K : " + toBytes("+10K") + " bytes");
System.out.println("+10M : " + toBytes("+10M") + " bytes");
System.out.println("+10G : " + toBytes("+10G") + " bytes");
System.out.println("+10T : " + toBytes("+10T") + " bytes");
System.out.println("+10P : " + toBytes("+10P") + " bytes\n");
System.out.println("-10K : " + toBytes("-10K") + " bytes");
System.out.println("-10M : " + toBytes("-10M") + " bytes");
System.out.println("-10G : " + toBytes("-10G") + " bytes");
System.out.println("-10T : " + toBytes("-10T") + " bytes");
System.out.println("-10P : " + toBytes("-10P") + " bytes\n");
}
}
Output
10K : 10240 bytes 10M : 10485760 bytes 10G : 10737418240 bytes 10T : 10995116277760 bytes 10P : 11258999068426240 bytes +10K : 10240 bytes +10M : 10485760 bytes +10G : 10737418240 bytes +10T : 10995116277760 bytes +10P : 11258999068426240 bytes -10K : -10240 bytes -10M : -10485760 bytes -10G : -10737418240 bytes -10T : -10995116277760 bytes -10P : -11258999068426240 bytes
No comments:
Post a Comment