2016-12-10 75 views
0

我想一些0和1存入存储器如何将二进制文件(0和1)存储/加载到内存中?

我不知道怎么解释清楚这一点,但我会尽我所能做到。 比方说,我有一个大约420字节的IMAGE文件。

red icon

我希望显示其二进制代码,这意味着我想看到的0和1。我运行这段代码做到这一点,这工作得很好......

import java.util.Scanner; 
import java.io.BufferedInputStream; 
import java.io.FileInputStream; 

public class fileToBin { 
    public static void main(String[] args) throws Exception { 

     StringBuilder sb = new StringBuilder(); 

     Scanner ana = new Scanner(System.in); 
     System.out.println("File?"); 
     String fileName = ana.nextLine(); 

     try (BufferedInputStream is = new BufferedInputStream(new FileInputStream(fileName))) { 

      for (int b; (b = is.read()) != -1;) { 

       String s = "0000000" + Integer.toBinaryString(b); 

       s = s.substring(s.length() - 8); 
       sb.append(s); 
      } 
     } 

     System.out.println(sb); 
    } 
} 

我送FF0000.png作为输入,并得到了以下的输出...

100010010101000001001110010001110000110100001010000110100000101000000000000000000000000000001101010010010100100001000100010100100000000000000000000000001000000000000000000000000000000010000000000010000000011000000000000000000000000011000011001111100110000111001011000000000000000000000000000000010111001101010010010001110100001000000000101011101100111000011100111010010000000000000000000000000000010001100111010000010100110101000001000000000000000010110001100011110000101111111100011000010000010100000000000000000000000000001001011100000100100001011001011100110000000000000000000011101100001100000000000000000000111011000011000000011100011101101111101010000110010000000000000000000000000100111001010010010100010001000001010101000111100001011110111011011101001000110001000000010000000000000000000011001100001110100000111110100011011110111101000010010000100100000111000011101101100001101101010001111001011100000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010010001000000100111010000001001110000000000011100010000001011000100000010011001000010110110011110110101011011010001100001110111001011110010011001011111011001101010000000000000000000000000000000000100100101000101010011100100010010101110010000100110000010000010 

我明白这是内存方向(请纠正我,如果我错了这些条款)这个特定的文件。

现在,让我们说我没有没有图像文件,我没有检索任何图像文件的二进制代码。我唯一拥有的就是这个0和1,我不知道这组0和1是否代表一个文件。我不知道这代表什么。

我想在计算机内存中插入/加载这个0和1。我怎样才能做到这一点?

这可以称为我的早先行动的反向过程,我从文件中检索二进制代码。现在,我想将一些0和1插入到内存中并将其另存为文件。这并不需要是一个IMAGE文件,任何文件扩展名都可以。因为我认为我不知道任何图像文件的存在。

所以,我的主要任务是我有一些0和1S,我想将它加载到内存并保存为一个文件。有可能这样做吗?我怎样才能用Java或任何其他编程语言来做到这一点?这种内存和二进制表示如何工作?

对不起,我noobness并感谢您的耐心:)

+0

那么多,你想包含'0's和'1's文本转换成二进制文件? – qxz

+0

是的,这是主要想法 –

回答

1

由于二进制的String称为str和某种OutputStream(如FileOutputStream)呼吁out

,每8个字符str ,得到该字节的数值为Integer.parseInt,write它为out

String str = ...; 
OutputStream out = ...; 

for (int i = 0; i < str.length; i += 8) { 
    String byteStr = str.substring(i, i+8); 
    int byteVal = Integer.parseInt(byteStr, 2); 
    out.write(byteVal); 
} 

注意,这将导致IndexOutOfBoundsException如果str.length不是8

+0

假设'str.length'不是8的倍数,那么我应该在'str'中加零吗?如果是,那么我应该在哪里添加这些?在'str'的开头或结尾? –

+0

你也可以做;两者都会给你有效的字节序列。这些数据来自哪里? – qxz

相关问题