java将二进制文件转为相同字符的文本

java实现将二进制xml文件转为文本

apk是android的应用程序包吧,你解压后想干啥,想要得到什么东西

java将二进制文件转为相同字符的文本

java怎么将二进制转化成字符

import java.io.UnsupportedEncodingException;

import java.util.Arrays;

/*

* String(byte[] bytes, String charsetName):通过指定的字符集解码字节数组

* byte[] getBytes(String charsetName):使用指定的字符集合把字符串编码为字节数组

*

* 编码:把看得懂的变成看不懂的

* String — byte[]

*

* 解码:把看不懂的变成看得懂的

* byte[] — String

*

* 举例:谍战片(发电报,接电报)

*

* 码表:小本子

* 字符 数值

*

* 要发送一段文字:

* 今天晚上在老地方见

*

* 发送端:今 — 数值 — 二进制 — 发出去

* 接收端:接收 — 二进制 — 十进制 — 数值 — 字符 — 今

*

* 今天晚上在老地方见

*

* 编码问题简单,只要编码解码的格式是一致的。

*/

public class StringDemo {

public static void main(String[] args) throws UnsupportedEncodingException {

String s = “你好”;

// String — byte[]

byte[] bys = s.getBytes(); // [-60, -29, -70, -61]

// byte[] bys = s.getBytes(“GBK”);// [-60, -29, -70, -61]

// byte[] bys = s.getBytes(“UTF-8”);// [-28, -67, -96, -27, -91, -67]

System.out.println(Arrays.toString(bys));

// byte[] — String

String ss = new String(bys); // 你好

// String ss = new String(bys, “GBK”); // 你好

// String ss = new String(bys, “UTF-8”); // ???

System.out.println(ss);

}

}

如何用Java或C语言解析二进制文件为文本文件?

在学习C语言fopen()函数后,知道它的第二个参数是标志字符串。如果字符串中出现’b’,则表明是以打开二进制(binary)文件,否则是打开文本文件。

那么什么是文本文件,什么是二进制文件呢?

从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。

ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:

ASC码: 00110101 00110110 00110111 00111000

↓ ↓↓  ↓

十进制码: 5 678

共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。

二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。

文本文件与二进制文件的区别在系统存储上它们实际上并没有什么区别,都是以二进制的方式存储于硬盘上。之所以分二进制文件和文本文件,主要是逻辑上的区分,文本文件更人为可读而已。站在编程的角度看,文本文件是基于字符编码过后的,比如常见的就有ascii编码,gbk编码,unicode编码等,文本工具直接打开人为可读。而二进制文件是基于值的编码,这个值到底是什么,完全可自定义,所以可以说二进制文件是一种特殊编码的文件。如果用java编程,可能就根本没遇到过以二进制打开和文本文件打开这两种方式。java里面有字符流和字节流,字符流是对字节流的封装,有编码解码,而字节流操作的则是byte数组,所以更容易理解。python的文件读写方式则更贴近C。因为python和java他们底层都是C,所以很有必要弄清C的读写文件方式。

在Windows和DOS系统中,狭义的文本文件是指扩展名为txt的文件。实际上,那些没有规定格式的,由可理解的的ASCII以及其他编码文字组成的文件都是文本文件,如C源程序文件,HTML超文本,XML。除此之外的其他文件都是二进制文件,如Word文件DOC,图象格式文件JPG。

实际上,fopen()的 b 标志不但可以打开二进制文件,还可以打开文本文件,同样,不带 b 标志也可以打开文本文件。

既然这样,为什么还要区分两种打开方式呢?

因为这两种方式在读写文件时的操作是不一样的。

二进制方式很简单,读文件时,会原封不动的读出文件的全部内容,写的时候,也是把内存缓冲区的内容原封不动的写到文件中。

而文本方式就不一样了,在写文件时,会将换行符号CRLF(0x0D 0x0A)全部转换成单个的0x0A,并且当遇到结束符CTRLZ(0x1A)时,就认为文件已经结束。相应的,写文件时,会将所有的0x0A换成0x0D0x0A。

所以,若使用文本方式打开二进制文件时,就很容易出现文件读不完整,或内容不对的错误。即使是用文本方式打开文本文件,也要谨慎使用,比如复制文件,就不应该使用文本方式。

要特别注意的是,上面这样的说法仅适用于DOS和Windows系统。在Unix和其他一些系统中,没有文本方式和二进制方式的区分,使不使用’b’标志都是一样的。这是由于不同操作系统对文本文件换行符的定义,和C语言中换行符的定义有所不同而造成的。

如上文已提到,DOS和Windows系统使用CRLF(0x0D 0x0A)即\r\n双字节作为文本文件换行符,而Unix文本文件的换行符只有一个字节LF(0x0A)为。在C语言中,也是以LF即’\n’为换行符。

由于DOS/Windows定义的换行符和C语言的不一致,C语言的标准输入输出函数适行读写文本文件时,就适行了CRLF-LF的转换。而Unix的定义和C语言的是一样的,就不必转换了。

那么,为什么会有定义不一致的情况呢,这纯属历史原因。当初C是在Unix上发展的,对换行的定义自然就一样了。其后C被引入到DOS系统,为了使原有的C程序能不加修改的读写DOS的文本文件,所以就在文件读写上做了修改。随着DOS/Windows成为主流平台,这个当初为了兼容而做的修改给众多的C语言开发者添了这样一个小小的麻烦。

所以,二进制和文本模式的区别就在于对于换行符和一些非可见字符上面的转化,所以安全起见,是使用二进制读取会比较安全一些。

java中怎样把二进制数转换成对应的字符串

查API呀 String 里面有方法:构造方法摘要String()

初始化一个新创建的 String 对象,使其表示一个空字符序列。String(byte[] bytes)

通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。String(byte[] bytes, Charset charset)

通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。String(byte[] ascii, int hibyte)

已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。String(byte[] bytes, int offset, int length)

通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。String(byte[] bytes, int offset, int length, Charset charset)

通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。String(byte[] ascii, int hibyte, int offset, int count)

已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。String(byte[] bytes, int offset, int length, String charsetName)

通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。String(byte[] bytes, String charsetName)

通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。String(char[] value)

分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。String(char[] value, int offset, int count)

分配一个新的 String,它包含取自字符数组参数一个子数组的字符。String(int[] codePoints, int offset, int count)

分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符。String(String original)

初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。String(StringBuffer buffer)

分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。String(StringBuilder builder)

分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。

java 如何将二进制数据流转换成字符串并保存

private static String bytesToString(String filename) {

String myreadline = “”;

try {

// 创建FileReader对象,用来读取字符流

FileReader fr = new FileReader(“userinfo.txt”);

// 缓冲指定文件的输入

BufferedReader br = new BufferedReader(fr);

// 定义一个String类型的变量,用来每次读取一行

while (br.ready()) {

// 读取一行

myreadline = myreadline + (myreadline.equals(“”)?””:”\n”) + br.readLine();

// 在屏幕上输出

System.out.println(myreadline);

}

br.close();

fr.close();

} catch (IOException e) {

e.printStackTrace();

}

return myreadline;

}

public static void writerFile(String fileString, String filePath) {

FileWriter fw;

try {

fw = new FileWriter(filePath);

// 将缓冲对文件的输出

BufferedWriter bw = new BufferedWriter(fw);

bw.write(fileString);

bw.flush();

bw.close();

fw.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void main(String[] args) throws FileNotFoundException,

Exception {

// TODO Auto-generated method stub

String fileString = bytesToString(“D:/workspace/TestStruts2/userinfo.txt”);

writerFile(fileString,”D:/workspace/TestStruts2/test.txt”);

}

java里如何将一个文本文件转化成一个文件内容为{0,1}这样的文件

取得二进制流吧,如果要将二进制输出到文件当成字符显示的话,你把二进制的数据每个转换成整数,比如0转换成0,然后输出到目标文件吧

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月28日 04:03:40
下一篇 2024年3月28日 04:12:00

相关推荐

  • java获取字符串指定字符,java获取字符串指定字符的位置

    java如何读取字符串中的某一段字符串 1、在Java中获取字符串中指定的值可以使用以下几种方式:点击学习大厂名师精品课使用substring()方法可以使用String类提供的substring(intbeginIndex,intendIndex)方法,从原始字符串中截取出指定范围的字符子串。 2、第一个参数是开始截取的字符位置。(从0开始)第二个参数是结…

    2024年5月23日
    4200
  • 在c语言中如何实现输出字符改变颜色呢,c语言输出文字变色

    c语言怎么实现输出颜色的变化 1、第一步、进入到vs界面,在上方工具栏中选择箭头所指的工具选项,如下图所示。第二步、选择箭头所指的选项,点击进入选项窗口,如下图所示。第三步、点击箭头所指的环境选项,进入到环境设置,如下图所示。 2、方法2, 使用ansi颜色码。两步:I. 修改c:\windows\system32\CONFIG.NT文件,在最后添加一行:d…

    2024年5月23日
    4700
  • linux打开写字板,linux怎么打开字符界面

    Linux:命令gedit主要作用是什么? Gedit是一款基于GTK+技术,在GNOME桌面环境下兼容UTF-8的文本编辑器。简单易用,支持的功能比较多,是Linux(桌面环境)下比较流行的文本编辑器。好比windows下的记事本程序,学习成本几乎是没有的。 gedit,kate等等:在图形界面打开任意文件或者url(gnome)。 启动:从菜单启动:应用…

    2024年5月23日
    3400
  • c语言将字符串内字符进行替换,c语言截取字符串中的某一段字符

    C语言中如何替换一个字符串中的字符 打开visual C++ 0-文件-新建-文件-C++ Source File。定义变量:#include stdio.hvoid main(){ char c1,c2,c3; /*定义字符变量*/。 第一步,依次单击visual C ++ 0的“文件”–“新建”–“文件”–“C++ S…

    2024年5月23日
    3800
  • excel去除文本格式,excel表格如何去除文本格式

    excel怎样清除格式? Excel单元格数据内容及格式清除方法:打开“素材.xlsx”文件,选择A2单元格,将光标定位于编辑栏,按【Delete】键将文本清除。可以看到文字内容已经被删除了,但格式依然存在,如批注、单元格中数值的字体和字号格式等。 首先打开一个已经套用了表格格式的电子表格。然后将套用了格式的表格全部选中。单击“开始”菜单标签,再单击工具栏“…

    2024年5月23日
    4000
  • 下述对c语言字符数组的描述中错误的是,下面对c语言字符数组

    跪求c语言高手光临回答问题得分 1、主函数循环体for语句是函数的主体,运行过程应为:i=0时,a=3,k=k+f(a),将a传递至函数f;在函数f中,c=a=3,局部静态变量a=2,c=c+1=3+1=4,返回值为: (a++)+c=3+4=7;固k=0+7=7。 2、若有3个字符串SSS3,其中:S1=“abcdef;S2=123456;要求用字符数组实…

    2024年5月23日
    4600
  • c语言字符中除去字符,c语言中输出字符的格式字符

    C语言“在字符串中删除指定的字符”?怎么编写程序 1、c语言中书写删除字符串中某个字符的程序的具体操作步骤如下:编写头函数,包括“#include stdio.h.”与“#include string.h.“。定义两个相同容量的字符串储存的变量 char a【100】; char b【100】。 2、输入:第一行是一个字符串; 第二行是一个字符。输出:删除指…

    2024年5月23日
    4400
  • java截取字符串的方法,JAVA截取字符串中的一段字符

    java怎么获取字符串中指定的值? 在一个String字符串中 查找某个汉字的索引 可以使用str.indexOf(字) 获取在字符串中的索引位置,同样索引从0开始,若字符串中没有该汉字, 返回-1就行了。 用substring.具体用法:字符串截取,substring(int beginindex)返回一个新的字符串,它是此字符串的一个子字符串。subst…

    2024年5月23日
    4000
  • 日期格式java,日期格式yyyy一mm一dd转文本

    Java中怎么把字符串转换成日期格式啊 定义一个字符串类型的时间;创建一个SimpleDateFormat对象并设置格式;最后使用SimpleDateFormat的parse方法将String类型的时间转换成Date类型的时间。 SimpleDateFormat sdf = new SimpleDateFormat( yyyy年MM月dd日 );String…

    2024年5月23日
    4900
  • linux字符编码,linux字符编码 c

    如何在Linux系统实现字符编码转换 1、在Linux中查看文件编码可以通过以下几种方式:在Vim中可以直接查看文件编码:setfileencoding,即可显示文件编码格式。 2、用VI查看文件编码,在Vi命令模式以下命令,即可显示文件编码格式。 改写~/.vimrc 文件,在文件中添加以下内容,就可以让vi自动识别UTF-8或者GBK编码的文件。 3、U…

    2024年5月23日
    4400

发表回复

登录后才能评论



关注微信