java中的0x00代表什么,写入二进制文件问题

写入二进制文件的时候,利用writeUTF,然后就要有一个写入byte为{0x00}的操作,说是什么补位。。。看不懂,只学过c语言,不知道这样写干啥,求大神。。

3个回答

关于写二进制文件多出“0D”的问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

真实的数字0,但注意不是字符0(0x30是字符0)

nothing_student
nothing_student private byte[] m_datapadding = { 0x00 }; //填充空白,以补足字节位数. 那段代码定义的注释啥意思,什么叫填充空白?
大约 4 年之前 回复

十六进制的0,其实就是字符0

0x00和0x0。0x000,0x0000,...都是0。小学一年级的都知道,在数字前面补0,得到的数字还是原来的数字。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确
目前已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。 尝试过使用C#的sbyte来解决: bw1 = new BinaryWriter(new FileStream("C:\\Users\\DELL\\Desktop\\SpatialIndex\\ctest1.bin", FileMode.Create)); bw2 = new BinaryWriter(new FileStream("C:\\Users\\DELL\\Desktop\\SpatialIndex\\ctest2.bin", FileMode.Create)); byte[] bits=BitConverter.GetBytes(501751.060001268);//测试数据 sbyte[] bitsb = new sbyte[8]; for (int i = 0; i < bits.Length; i++) { byte abyte = bits[i]; if (abyte > 127) { bitsb[i] = (sbyte)(abyte - 256); } else { bitsb[i] = (sbyte)abyte; } bw1.Write(bitsb[i]); bw2.Write(bits[i]); } 但是写入后对比,两个文件中的内容还是一样,并没有生成为java二进制格式。 不知道有哪位高人也遇到并解决过类似问题。
Java语言打开一个文件并写入汉字再保存调用记事本怎么实现的?
Java语言打开一个文件并写入汉字再保存调用记事本怎么实现的?
在Dos中进行java编译运行
javac在c盘,java文件在f盘,我再Dos中写入javac的路径到bin目录 然后javac f:\Program Files\test\HelloWorld. java ,提示javac:无效标志:F:\Program,求解
求助,执行Java文件后电脑不断写入文件死机
我在用eclipse,练习JAVA的文档归档和解档。用到FileOutputStream和FileInputStream. 原来执行都没有什么太大问题,顶多编译不通过或执行不通过,最后可以中断程序。 但是在一次调试过程中(失败),中断执行后,电脑还是不断不断不断的给文件夹写入文件,关掉eclipse还在写,电脑注销后还在写,直到电脑重启后才停止写入。 最后,文件夹下有73万个接近0kb的文件,共1.5G。现在这个文件夹打也打不开,删也删不掉。之后我重新打开eclipse,更改了解档的路径,重新执行代码并没有出现之前的不断写入文件的问题。 请问有什么解决方法把我这73万个文件的文件夹给删除了?另外,为什么会出现这个问题?(电脑WIN7)
Java项目部署在Linux下文件写入的问题
一个java项目在windows下文件读写都没有问题,但是部署在Linux下的时候写入文件时有问题。 是要编辑一个文件,先打开了这个文件把里面的内容读出来,然后编辑,完了之后保存,如果打开编辑的时间超过了20秒,保存的时候就保存不上,也没有什么错误信息,如果不超过20秒,就可以保存成功。不是session的问题,session设置了30分钟。求各路大神前来指教啊
类的定义和它的成员函数的实现分开放会报错
为什么将类的定义和它的成员函数的实现分别放在.h和.cpp中就会报错: LNK2019: 无法解析的外部符号 "public: void __cdecl YtPlc_Mitsubishi_Mc::InitParam(void)" (?InitParam@YtPlc_Mitsubishi_Mc@@QEAAXXZ),该符号在函数 main 中被引用 PLC_test D:\zhoujy\prj\PLC_test\PLC_test\PLC_test.obj .h中的代码如下: ``` class YtPlc_Mitsubishi_Mc // : public YtPlc { public: YtPlc_Mitsubishi_Mc(); //初始化参数 void InitParam(); }; ``` .cpp中的实现如下: ``` #include "ytplc_mitsubishi_mc.h" YtPlc_Mitsubishi_Mc::YtPlc_Mitsubishi_Mc() { } void YtPlc_Mitsubishi_Mc::InitParam() { //发送命令 write_buff_[0] = 0x50; // 副头部 write_buff_[1] = 0x00; // 副头部 write_buff_[2] = 0x00; // 网络编号 write_buff_[3] = (char)0xff; // 可编程控制器编号 write_buff_[4] = (char)0xff; // 请求目标模块I/O编号L write_buff_[5] = 0x03; // 请求目标模块I/O编号H write_buff_[6] = 0x00; // 请求目标模块站号 // 长度从CPU监视定时器L到指令结束 write_buff_[7] = 0x00; //请求数据长度L write_buff_[8] = 0x00; //请求数据长度H //CPU 监视定时器 0:无限等待 0001~FFFF H (1~65535): 等待时间(单位 250ms) @《三菱Q_L系列通信协议参考》3.1.3 P73 write_buff_[9] = 0x01; // CPU监视定时器L write_buff_[10] = 0x00; // CPU监视定时器H // 指令1401 @《三菱Q_L系列通信协议参考》3.3.7 P154 write_buff_[11] = 0x01; // 指令L write_buff_[12] = 0x14; // 指令H write_buff_[13] = 0x00; // 子指令L write_buff_[14] = 0x00; // 子指令H // 字单位的批量写入 write_buff_[15] = 0x00; // 起始软元件 write_buff_[16] = 0x00; // 起始软元件 write_buff_[17] = 0x00; // 起始软元件 write_buff_[18] = 0x00; // 软元件代码 write_buff_[19] = 0x00; // 软元件点数 write_buff_[20] = 0x00; // 软元件点数 // 软元件点数的范围 // e.g 1995H 1202H 1130H -> {95H 19H 02H 12H 30H 12H} for (int i = 0; i < 20; i++) { write_buff_[21 + i * 2] = 0x00; write_buff_[21 + i * 2 + 1] = 0x00; } //读取命令 read_buff_[0] = 0x50; // 副头部 read_buff_[1] = 0x00; // 副头部 read_buff_[2] = 0x00; // 网络编号 read_buff_[3] = (char)0xff; // 可编程控制器编号 read_buff_[4] = (char)0xff; // 请求目标模块I/O编号L read_buff_[5] = 0x03; // 请求目标模块I/O编号H read_buff_[6] = 0x00; // 请求目标模块站号 read_buff_[7] = 0x0c; //请求数据长度L read_buff_[8] = 0x00; //请求数据长度H //CPU 监视定时器 0:无限等待 0001~FFFF H (1~65535): 等待时间(单位 250ms) @《三菱Q_L系列通信协议参考》3.1.3 P73 read_buff_[9] = 0x01; // CPU监视定时器L read_buff_[10] = 0x00; // CPU监视定时器H // 0401 T寄存器读取 @《三菱Q_L系列通信协议参考》3.3.6 P150 // WARNING: M寄存器读取 send_buff_[18] = 0x90 待确认 read_buff_[11] = 0x01; // 指令L read_buff_[12] = 0x04; // 指令H read_buff_[13] = 0x00; // 子指令L read_buff_[14] = 0x00; // 子指令H // 字单位的批量写入 read_buff_[15] = 0x00; // 起始软元件 read_buff_[16] = 0x00; // 起始软元件 read_buff_[17] = 0x00; // 起始软元件 read_buff_[18] = 0x00; // 软元件代码 read_buff_[19] = 0x00; // 软元件点数 read_buff_[20] = 0x00; // 软元件点数 } ``` 但如果把它们都放到头文件中,即把成员函数和构造函数的实现和类的定义放到一起,就不会有这个问题了
Java读取二进制文件,二进制文件是由C++写生成的
有一个应用,需要解析一个C++生成的文件,我用BufferedRandomAccessFile读取。 问题:1、文件中原8字节是C++的double存储的,二进制高地位相反,且我了解的是1位符号位,11位移码,52位尾数,请问有无好的方法在Java中得到该8字节的正确数据; 2、里面有4字节的int型的数据,由于C++写入文件是高位在后,低位在前(与java相反), 我是通过位移运算解决了;
代码调试成功,但是数据却写入不到文件中去,我用的是VS2017,数据文件也已经放入项目中
想请问一下大家,代码运行没有报错,但是数据写入不到文件中去,请问是什么原因? 这是头文件 ``` _****#ifndef _NS_H #include<stdio.h> #include<math.h> #include<time.h> #define imax 100 #define jmax 100 #define maxit 10000 extern double ma0, a0, u0, v0, p0, t0, tr, tw, tratio, visr, xl, gamma, gascon, pr; extern double vis0; extern double cv, cp, r0, rel, e0; extern double kc0; extern double delt, yl, dx, dy; extern double dtime; extern int iter; extern int convergence; extern int t1, t2; extern double dt; extern double u[imax][jmax], v[imax][jmax], p[imax][jmax], r[imax][jmax], rl[imax][jmax], t[imax][jmax], vis[imax][jmax], ma[imax][jmax]; extern double e[imax][jmax], a[imax][jmax], kc[imax][jmax]; void bc(); void conver(); void dynvis(double tr, double tout, double visr, double visout); void mac(); void mdot(); void output(); void qcx(int i, int j, int icase, double qxout); void qcy(int i, int j, int icase, double qyout); void tauxx(int i, int j, int icase, double txx); void tauxy(int i, int j, int icase, double txy); void tauyy(int i, int j, int icase, double tyy); void thermc(double vis0, double cp, double pr, double kcout); void tstep(); #endif**_** ``` 这是主循环 ``` /* A C program of two-dimensional complete Navier-Stokes equations for the supersonic flow over a flat plate based on MacCormack's explicit time-marching technique. Written by ZhouMingming, January, 2019 Based on John D. Anderson, JR., Chapter 10, In Computational Fluid Dynamics, The Basics with Applications, McGraw-Hill, 2002, 4 */ #include"_NS_H.h" int main() { //初始化流场及各种参数 ma0 = 8; a0 = 340.28; u0 = ma0 * a0; v0 = 0; p0 = 1.01325e5; t0 = 288.16; tr = 288.16; tratio = 2; tw = t0 * tratio; visr = 1.7894e-5; xl = 0.00001; gascon = 287; gamma = 1.4; pr = 0.71; dynvis(tr, t0, visr, vis0); cv = gascon / (gamma - 1); cp = cv * gamma; r0 = p0 / (gascon * t0); e0 = cv * t0; rel = r0 * sqrt(u0*u0 + v0 * v0)*xl / vis0; thermc(vis0, cp, pr, kc0); delt = 5 * xl / sqrt(rel); yl = 5 * delt; dx = xl / (imax - 1); dy = yl / (jmax - 1); FILE *fp4; fp4 = fopen("time.txt", "w"); //主循环 t1 = clock(); for (iter = 0; iter < maxit; iter++) { if (iter == 0) { for (int i = 0; i < imax; i++) { for (int j = 0; j < jmax; j++) { u[i][j] = u0; v[i][j] = v0; p[i][j] = p0; t[i][j] = t0; r[i][j] = r0; rl[i][j] = r0; vis[i][j] = vis0; ma[i][j] = ma0; e[i][j] = e0; kc[i][j] = kc0; a[i][j] = a0; } } } //确定推进时间步长 tstep(); //使用MacCormack time marching algorithm求解 mac(); //确定是否收敛 conver(); if (convergence) { mdot(); output(); } } t2 = clock(); dt = (t2 - t1) / CLOCKS_PER_SEC; fprintf(fp4, "%f", dt); fclose(fp4); } ``` 以下是各个cpp文件 ``` #include"_NS_H.h" void bc() { //定义边界条件 //case1: at (0, 0) u[0][0] = 0; v[0][0] = 0; p[0][0] = p0; t[0][0] = t0; e[0][0] = cv * t[0][0]; r[0][0] = p[0][0] / gascon / t[0][0]; dynvis(tr, t[0][0], visr, vis[0][0]); thermc(vis[0][0], cp, pr, kc[0][0]); a[0][0] = a0; ma[0][0] = 0; //case2: at inflow and upper boundary for (int j = 1; j < jmax; j++) { u[0][j] = u0; v[0][j] = v0; p[0][j] = p0; t[0][j] = t0; e[0][j] = cv * t[0][j]; r[0][j] = p[0][j] / gascon / t[0][j]; dynvis(tr, t[0][j], visr, vis[0][j]); thermc(vis[0][j], cp, pr, kc[0][j]); a[0][j] = a0; ma[0][j] = ma0; } for (int i = 1; i < imax; i++) { u[i][jmax - 1] = u0; v[i][jmax - 1] = v0; p[i][jmax-1] = p0; t[i][jmax-1] = t0; e[i][jmax - 1] = cv * t[i][jmax - 1]; r[i][jmax-1] = p[i][jmax-1] / gascon / t[i][jmax-1]; dynvis(tr, t[i][jmax-1], visr, vis[i][jmax-1]); thermc(vis[i][jmax-1], cp, pr, kc[i][jmax-1]); a[i][jmax-1] = a0; ma[i][jmax-1] = ma0; } //case3: at lower surface boundary for (int i = 1; i < imax; i++) { u[i][0] = 0; v[i][0] = 0; p[i][0] = 2 * p[i][1] - p[i][2]; t[i][0] = tw; e[i][0] = cv * t[i][0]; r[i][0] = p[i][0] / gascon / t[i][0]; dynvis(tr, t[i][0], visr, vis[i][0]); thermc(vis[i][0], cp, pr, kc[i][0]); ``` ``` a[i][0] = sqrt(gamma*gascon*t[i][0]); ma[i][0] = sqrt(u[i][0] * u[i][0] + v[i][0] * v[i][0]) / a[i][0]; } //case4: at outflow boundary for (int j = 1; j < jmax - 1; j++) { u[imax - 1][j] = 2 * u[imax - 2][j] - u[imax - 3][j]; v[imax - 1][j] = 2 * v[imax - 2][j] - v[imax - 3][j]; p[imax - 1][j] = 2 * p[imax - 2][j] - p[imax - 3][j]; t[imax - 1][j] = 2 * t[imax - 2][j] - t[imax - 3][j]; e[imax - 1][j] = cv * t[imax - 1][j]; r[imax - 1][j] = p[imax - 1][j] / gascon / t[imax - 1][j]; dynvis(tr, t[imax - 1][j], visr, vis[imax - 1][j]); thermc(vis[imax - 1][j], cp, pr, kc[imax - 1][j]); a[imax - 1][j] = sqrt(gamma*gascon*t[imax - 1][j]); ma[imax - 1][j] = sqrt(u[imax - 1][j] * u[imax - 1][j] + v[imax - 1][j] * v[imax - 1][j]) / a[imax - 1][j]; } } ``` ``` #include"_NS_H.h" void conver() { FILE *fp1; fp1 = fopen("time.txt", "a"); double rcrit = 0; double dr; for (int i = 0; i < imax; i++) { for (int j = 0; j < jmax; j++) { dr = fabs(r[i][j] - rl[i][j]); if (rcrit < dr) { rcrit = dr; } } } if (rcrit <= 2e-6) { printf("Converence is done!"); convergence = 1; } else { fprintf(fp1, "%d ", iter); fprintf(fp1, "%f ", rcrit); fprintf(fp1, "%f ", dtime); fprintf(fp1, "\n"); fclose(fp1); for (int i = 0; i < imax; i++) { for (int j = 0; j < jmax; j++) { rl[i][j] = r[i][j]; } } convergence = 0; } } ``` ``` #include"_NS_H.h" void dynvis(double tr, double tout, double visr, double visout) { visout = visr * pow(tout / tr, 1.5); visout = visout * (tr + 110) / (tout + 110); } ``` ``` #include"_NS_H.h" double s[5][imax][jmax], f[5][imax][jmax], g[5][imax][jmax]; double sb[5][imax][jmax], sl[5][imax][jmax]; double txx[imax][jmax], txy[imax][jmax], tyy[imax][jmax]; double qx[imax][jmax], qy[imax][jmax]; void mac() { double dsdt; //使用MacCormack's algorithm更新流场变量 for (int i = 0; i < imax; i++) { for (int j = 0; j < jmax; j++) { s[0][i][j] = r[i][j]; s[1][i][j] = r[i][j] * u[i][j]; s[2][i][j] = r[i][j] * v[i][j]; s[3][i][j] = 0; s[4][i][j] = r[i][j] * (e[i][j] + 1 / 2 * (u[i][j] * u[i][j] + v[i][j] * v[i][j])); sl[0][i][j] = r[i][j]; sl[1][i][j] = r[i][j] * u[i][j]; sl[2][i][j] = r[i][j] * v[i][j]; sl[3][i][j] = 0; sl[4][i][j] = r[i][j] * (e[i][j] + 1 / 2 * (u[i][j] * u[i][j] + v[i][j] * v[i][j])); tauxx(i, j, 1, txx[i][j]); tauxy(i, j, 1, txy[i][j]); qcx(i, j, 1, qx[i][j]); f[0][i][j] = s[1][i][j]; f[1][i][j] = s[1][i][j] * s[1][i][j] / s[0][i][j] + p[i][j] - txx[i][j]; f[2][i][j] = s[1][i][j] * s[2][i][j] / s[0][i][j] - txy[i][j]; f[3][i][j] = 0; f[4][i][j] = (s[4][i][j] + p[i][j])*s[1][i][j] / s[0][i][j] + qx[i][j] - s[1][i][j] / s[0][i][j] * txx[i][j] - s[2][i][j] / s[0][i][j] * txy[i][j]; tauyy(i, j, 1, tyy[i][j]); tauxy(i, j, 3, txy[i][j]); qcy(i, j, 1, qy[i][j]); g[0][i][j] = s[2][i][j]; g[1][i][j] = s[1][i][j] * s[2][i][j] / s[0][i][j] - txy[i][j]; g[2][i][j] = s[2][i][j] * s[2][i][j] / s[0][i][j] + p[i][j] - tyy[i][j]; g[3][i][j] = 0; g[4][i][j] = (s[4][i][j] + p[i][j])*s[2][i][j] / s[0][i][j] + qy[i][j] - s[1][i][j] / s[0][i][j] * txy[i][j] - s[2][i][j] / s[0][i][j] * tyy[i][j]; } } //预测步 for (int i = 1; i < imax - 1; i++) { for (int j = 1; j < jmax - 1; j++) { for (int k = 0; k < 5; k++) { dsdt = (f[k][i][j] - f[k][i + 1][j]) / dx + (g[k][i][j] - g[k][i][j + 1]) / dy; sb[k][i][j] = s[k][i][j] + dsdt * dtime; } //decode the variables r[i][j] = sb[0][i][j]; u[i][j] = sb[1][i][j] / sb[0][i][j]; v[i][j] = sb[2][i][j] / sb[0][i][j]; e[i][j] = sb[4][i][j] / sb[0][i][j] - 0.5*v[i][j] * v[i][j]; if (e[i][j] < 0) { e[i][j] = 0; } t[i][j] = e[i][j] / cv; p[i][j] = r[i][j] * gascon*t[i][j]; dynvis(tr, t[i][j], visr, vis[i][j]); thermc(vis[i][j], cp, pr, kc[i][j]); a[i][j] = sqrt(gamma*gascon*t[i][j]); ma[i][j] = v[i][j] / a[i][j]; } } //更新边界条件 bc(); //使用MacCormack's algorithm更新流场变量 for (int i = 0; i < imax; i++) { for (int j = 0; j < jmax; j++) { s[0][i][j] = r[i][j]; s[1][i][j] = r[i][j] * u[i][j]; s[2][i][j] = r[i][j] * v[i][j]; s[3][i][j] = 0; s[4][i][j] = r[i][j] * (e[i][j] + 1 / 2 * (u[i][j] * u[i][j] + v[i][j] * v[i][j])); tauxx(i, j, 2, txx[i][j]); tauxy(i, j, 2, txy[i][j]); qcx(i, j, 2, qx[i][j]); f[0][i][j] = s[1][i][j]; f[1][i][j] = s[1][i][j] * s[1][i][j] / s[0][i][j] + p[i][j] - txx[i][j]; f[2][i][j] = s[1][i][j] * s[2][i][j] / s[0][i][j] - txy[i][j]; f[3][i][j] = 0; f[4][i][j] = (s[4][i][j] + p[i][j])*s[1][i][j] / s[0][i][j] + qx[i][j] - s[1][i][j] / s[0][i][j] * txx[i][j] - s[2][i][j] / s[0][i][j] * txy[i][j]; tauyy(i, j, 2, tyy[i][j]); tauxy(i, j, 4, txy[i][j]); qcy(i, j, 2, qy[i][j]); g[0][i][j] = s[2][i][j]; g[1][i][j] = s[1][i][j] * s[2][i][j] / s[0][i][j] - txy[i][j]; g[2][i][j] = s[2][i][j] * s[2][i][j] / s[0][i][j] + p[i][j] - tyy[i][j]; g[3][i][j] = 0; g[4][i][j] = (s[4][i][j] + p[i][j])*s[2][i][j] / s[0][i][j] + qy[i][j] - s[1][i][j] / s[0][i][j] * txy[i][j] - s[2][i][j] / s[0][i][j] * tyy[i][j]; } } //修正步 for (int i = 1; i < imax - 1; i++) { for (int j = 1; j < jmax - 1; j++) { for (int k = 0; k < 5; k++) { dsdt = (f[i - 1][j][k] - f[i][j][k]) / dx + (g[i][j - 1][k] - g[i][j][k]) / dy; s[i][j][k] = 0.5*(sl[i][j][k] + sb[i][j][k] + dtime * dsdt); } //decode the variables r[i][j] = sb[0][i][j]; u[i][j] = sb[1][i][j] / sb[0][i][j]; v[i][j] = sb[2][i][j] / sb[0][i][j]; e[i][j] = sb[4][i][j] / sb[0][i][j] - 0.5*v[i][j] * v[i][j]; if (e[i][j] < 0) { e[i][j] = 0; } t[i][j] = e[i][j] / cv; p[i][j] = r[i][j] * gascon*t[i][j]; dynvis(tr, t[i][j], visr, vis[i][j]); thermc(vis[i][j], cp, pr, kc[i][j]); a[i][j] = sqrt(gamma*gascon*t[i][j]); ma[i][j] = v[i][j] / a[i][j]; } } //更新边界条件 bc(); } ``` ``` #include"_NS_H.h" void mdot() { //检查质量守恒是否成立 FILE *fp3; fp3 = fopen("dmass.txt", "a"); double massin = 0.0, massout = 0.0; double dmass; for (int j = 0; j < jmax; j++) { massin += r[0][j] * u[0][j]; massout += r[imax - 1][j] * u[imax - 1][j]; } dmass = fabs(massout - massin) / massin * 100; if (dmass > 1.0) { fprintf(fp3, "%f ", dmass); fprintf(fp3, "\n"); fclose(fp3); } } ``` ``` #include"_NS_H.h" void output() { double x[imax], y[jmax]; FILE *fp2; fp2 = fopen("output.txt", "a"); for (int i = 0; i < imax; i++) { x[i] = dx * i; } for (int j = 0; j < jmax; j++) { y[j] = dy * j; } for (int i = 0; i < imax; i++) { for (int j = 0; j < jmax; j++) { fprintf(fp2, "%f ", x[i]); fprintf(fp2, "%f ", y[i]); fprintf(fp2, "%f ", u[i][j] / u0); fprintf(fp2, "%f ", v[i][j]); fprintf(fp2, "%f ", p[i][j] / p0); fprintf(fp2, "%f ", t[i][j] / t0); fprintf(fp2, "%f ", r[i][j] / r0); fprintf(fp2, "%f ", a[i][j]); fprintf(fp2, "%f ", ma[i][j]); fprintf(fp2, "\n"); } } fclose(fp2); } ``` ``` #include"_NS_H.h" void qcx(int i, int j, int icase, double qxout) { double dtdx; switch (icase) { //向前差分时 case 1: if (i == 0) { dtdx = (t[1][j] - t[0][j]) / dx; } else { dtdx = (t[i][j] - t[i - 1][j]) / dx; } break; //向后差分时 case 2: if (i == imax - 1) { dtdx = (t[imax - 1][j] - t[imax - 2][j]) / dx; } else { dtdx = (t[i + 1][j] - t[i][j]) / dx; } break; } qxout = -1 * kc[i][j] * dtdx; } ``` ``` #include"_NS_H.h" void qcy(int i, int j, int icase, double qyout) { double dtdy; switch (icase) { //向前差分时 case 1: if (j == 0) { dtdy = (t[i][1] - t[i][0]) / dy; } else { dtdy = (t[i][j] - t[i][j - 1]) / dy; } break; //向后差分时 case 2: if (j == jmax - 1) { dtdy = (t[i][jmax-1] - t[i][jmax-2]) / dy; } else { dtdy = (t[i][j+1] - t[i][j]) / dy; } break; } qyout = -1 * kc[i][j] * dtdy; } ``` ``` #include"_NS_H.h" void tauxx(int i, int j, int icase, double txx) { double dudx, dvdy; switch (icase) { //dF/dX为向前差分 case 1: if (j == 0) { dvdy = (v[i][1] - v[i][0]) / dy; } else if (j == jmax - 1) { dvdy = (v[i][jmax - 1] - v[i][jmax - 2]) / dy; } else { dvdy = (v[i][j + 1] - v[i][j - 1]) / 2 / dy; } if (i == 0) { dudx = (u[1][j] - u[0][j]) / dx; } else { dudx = (u[i][j] - u[i - 1][j]) / dx; } break; //dF/dX为向后差分 case 2: if (j == 0) { dvdy = (v[i][1] - v[i][0]) / dy; } else if (j == jmax - 1) { dvdy = (v[i][jmax - 1] - v[i][jmax - 2]) / dy; } else { dvdy = (v[i][j + 1] - v[i][j - 1]) / 2 / dy; } if (i == imax-1) { dudx = (u[imax - 1][j] - u[imax - 2][j]) / dx; } else { dudx = (u[i + 1][j] - u[i][j]) / dx; } break; } txx = vis[i][j] * (4 / 3 * dudx - 2 / 3 * dvdy); } ``` ``` #include"_NS_H.h" void tauxy(int i, int j, int icase, double txy) { double dudy, dvdx; switch (icase) { //dF/dX为向前差分 case 1: if (j == 0) { dudy = (u[i][1] - u[i][0]) / dy; } else if (j == jmax - 1) { dudy = (u[i][jmax - 1] - u[i][jmax - 2]) / dy; } else { dudy = (u[i][j + 1] - u[i][j - 1]) / 2 / dy; } if (i == 0) { dvdx = (v[1][j] - v[0][j]) / dx; } else { dvdx = (v[i][j] - v[i - 1][j]) / dx; } break; //dF/dX为向后差分 case 2: if (j == 0) { dudy = (u[i][1] - u[i][0]) / dy; } else if (j == jmax - 1) { dudy = (u[i][jmax - 1] - u[i][jmax - 2]) / dy; } else { dudy = (u[i][j + 1] - u[i][j - 1]) / 2 / dy; } if (i == imax - 1) { dvdx = (v[imax - 1][j] - v[imax - 2][j]) / dx; } else { dvdx = (v[i + 1][j] - v[i][j]) / dx; } break; //dG/dy为向前差分 case 3: if (i == 0) { dvdx = (v[1][j] - v[0][j]) / dx; } else if (i == imax - 1) { dvdx = (v[imax - 1][j] - v[imax - 2][j]) / dx; } else { dvdx = (v[i + 1][j] - v[i - 1][j]) / 2 / dx; } if (j == 0) { dudy = (u[i][1] - u[i][0]) / dy; } else { dudy = (u[i][j] - u[i][j - 1]) / dy; } break; //dG/dy为向后差分 case 4: if (i == 0) { dvdx = (v[1][j] - v[0][j]) / dx; } else if (i == imax - 1) { dvdx = (v[imax - 1][j] - v[imax - 2][j]) / dx; } else { dvdx = (v[i + 1][j] - v[i - 1][j]) / 2 / dx; } if (j == jmax-1) { dudy = (u[i][jmax - 1] - u[i][jmax - 2]) / dy; } else { dudy = (u[i][j + 1] - u[i][j]) / dy; } break; } txy = vis[i][j] * (dudy + dvdx); } ``` ``` #include"_NS_H.h" void tauyy(int i, int j, int icase, double tyy) { double dudx, dvdy; switch (icase) { //dG/dy为向前差分 case 1: if (i == 0) { dudx = (u[1][j] - u[0][j]) / dx; } else if (i == imax-1) { dudx = (u[imax - 1][j] - u[imax - 2][j]) / dx; } else { dudx = (u[i + 1][j] - u[i - 1][j]) / 2 / dx; } if (j == 0) { dvdy = (v[i][1] - v[i][0]) / dy; } else { dvdy = (v[i][j] - v[i][j - 1]) / dy; } break; //dG/dy为向后差分 case 2: if (i == 0) { dudx = (u[1][j] - u[0][j]) / dx; } else if (i == imax - 1) { dudx = (u[imax - 1][j] - u[imax - 2][j]) / dx; } else { dudx = (u[i + 1][j] - u[i - 1][j]) / 2 / dx; } if (j == jmax - 1) { dvdy = (v[i][jmax - 1] - v[i][jmax - 2]) / dy; } else { dvdy = (v[i][j + 1] - v[i][j]) / dy; } break; } tyy = vis[i][j] * (4 / 3 * dvdy - 2 / 3 * dudx); } ``` ``` #include"_NS_H.h" void thermc(double vis0, double cp, double pr, double kcout) { kcout = vis0 * cp / pr; } ``` ``` #include"_NS_H.h" double vv[imax][jmax], dtt[imax][jmax]; double rex[imax][jmax], rey[imax][jmax]; void tstep() { double vvmax = 0; double dt1, dt2, dt3; double dtmin = 1; double tf = 0.5; double rexmax = 0, reymax = 0; for (int i = 1; i < imax - 1; i++) { for (int j = 1; j < jmax - 1; j++) { vv[i][j] = 4 / 3*gamma*vis[i][j] * vis[i][j] / pr / r[i][j]; rex[i][j] = r[i][j] * u[i][j] * dx / vis[i][j]; rey[i][j] = r[i][j] * v[i][j] * dy / vis[i][j]; if (rexmax < rex[i][j]) { rexmax = rex[i][j]; } if (reymax < rey[i][j]) { reymax = rey[i][j]; } if (vvmax < vv[i][j]) { vvmax = vv[i][j]; } } } for (int i = 1; i < imax - 1; i++) { for (int j = 1; j < jmax - 1; j++) { dt1 = sqrt(u[i][j]) / dx + sqrt(v[i][j]) / dy; dt2 = dt1 + a[i][j] * sqrt(1 / (dx*dx) + 1 / (dy*dy)); dt3 = dt2 + 2 * vvmax*(1 / dx / dx + 1 / dy / dy); dtt[i][j] = 1 / dt3; if (dtmin > dtt[i][j]) { dtmin = dtt[i][j]; } } } dtime = tf * dtmin; } ```
java 如何避免读取到正在被写入的文件
我现在需要定时从一个目录中获取文件,然后转移到其他文件夹,再删除源文件,现在出现一个情况,一个比较大的文件是由其他程序写入但还没有写完,我的程序拿到这个文件之后马上就进行操作并删除源文件,导致文件损坏,我现在要求只要是正在被其他程序写入的文件都不去操作它,那如何判断该文件是正在被写入的文件?(注:我不能修改写入文件的程序)
使用RC522写入block 0,写特殊指令0x40和0x43时超时。
使用树莓派SPI驱动RC522模块,读取block 0数据成功,但是写入block 0失败。参照网上资料,写入block 0前需要先写入两个特殊指令0x40和0x43,但是当我通过调用函数 ``` MFRC522_WriteReg(BitFramingReg, 0x07) MFRC522_ToCard(PCD_TRANSCEIVE, 0x40) //0x40 MFRC522_WriteReg(BitFramingReg, 0x00) MFRC522_ToCard(PCD_TRANSCEIVE, 0x43) //0x43 ``` 写入这两个命令时总是报错超时失败。但是其他request,select等流程调用 这两个函数都能成功,是在不知哪里有问题。怀疑是不是买的卡片不支持写入block 0,但是买的时候确实说是支持的。 下面是具体代码: ``` RC522.py: import RPi.GPIO as GPIO import spi import signal import time class MFRC522: PCD_IDLE = 0x00 # cancel current command PCD_AUTHENT = 0x0E # authent PCD_RECEIVE = 0x08 # receive data PCD_TRANSMIT = 0x04 # send data PCD_TRANSCEIVE = 0x0C # send & receive data PCD_RESETPHASE = 0x0F # reset PCD_CALCCRC = 0x03 # CRC calculate PICC_REQIDL = 0x26 # detect cards, not slepp PICC_REQALL = 0x52 # detect cards, all PICC_ANTICOLL = 0x93 # anti collision PICC_SElECTTAG = 0x93 # select card PICC_AUTHENT1A = 0x60 # authent A PICC_AUTHENT1B = 0x61 # authent B PICC_READ = 0x30 # read block PICC_WRITE = 0xA0 # write block PICC_DECREMENT = 0xC0 # dec money PICC_INCREMENT = 0xC1 # inc money PICC_RESTORE = 0xC2 # send data to buf PICC_TRANSFER = 0xB0 # save date from buf PICC_HALT = 0x50 # idle status Reserved00 = 0x00 # register CommandReg = 0x01 CommIEnReg = 0x02 DivlEnReg = 0x03 CommIrqReg = 0x04 DivIrqReg = 0x05 ErrorReg = 0x06 Status1Reg = 0x07 Status2Reg = 0x08 FIFODataReg = 0x09 FIFOLevelReg = 0x0A WaterLevelReg = 0x0B ControlReg = 0x0C BitFramingReg = 0x0D CollReg = 0x0E Reserved01 = 0x0F Reserved10 = 0x10 ModeReg = 0x11 TxModeReg = 0x12 RxModeReg = 0x13 TxControlReg = 0x14 TxAutoReg = 0x15 TxSelReg = 0x16 RxSelReg = 0x17 RxThresholdReg = 0x18 DemodReg = 0x19 Reserved11 = 0x1A Reserved12 = 0x1B MifareReg = 0x1C Reserved13 = 0x1D Reserved14 = 0x1E SerialSpeedReg = 0x1F Reserved20 = 0x20 CRCResultRegM = 0x21 CRCResultRegL = 0x22 Reserved21 = 0x23 ModWidthReg = 0x24 Reserved22 = 0x25 RFCfgReg = 0x26 GsNReg = 0x27 CWGsPReg = 0x28 ModGsPReg = 0x29 TModeReg = 0x2A TPrescalerReg = 0x2B TReloadRegH = 0x2C TReloadRegL = 0x2D TCounterValueRegH = 0x2E TCounterValueRegL = 0x2F Reserved30 = 0x30 TestSel1Reg = 0x31 TestSel2Reg = 0x32 TestPinEnReg = 0x33 TestPinValueReg = 0x34 TestBusReg = 0x35 AutoTestReg = 0x36 VersionReg = 0x37 AnalogTestReg = 0x38 TestDAC1Reg = 0x39 TestDAC2Reg = 0x3A TestADCReg = 0x3B Reserved31 = 0x3C Reserved32 = 0x3D Reserved33 = 0x3E Reserved34 = 0x3F NRSTPD = 22 MAX_LEN = 18 MI_OK = 0 MI_NOTAGERR = 1 MI_ERR = 2 MI_TIMEOUT = 3 def __init__(self, dev='/dev/spidev0.0', spd=1000000): self.dev0 = spi.openSPI(device=dev, speed=spd) GPIO.setmode(GPIO.BOARD) GPIO.setup(self.NRSTPD, GPIO.OUT) GPIO.output(self.NRSTPD, 1) self.MFRC522_Init() def MFRC522_WriteReg(self, addr, val): spi.transfer(self.dev0, ((addr<<1)&0x7E, val)) def MFRC522_ReadReg(self, addr): val = spi.transfer(self.dev0, (((addr<<1)&0x7E) | 0x80, 0)) return val[1] def MFRC522_SetRegBitMask(self, reg, mask): tmp = self.MFRC522_ReadReg(reg) self.MFRC522_WriteReg(reg, tmp | mask) def MFRC522_ClearRegBitMask(self, reg, mask): tmp = self.MFRC522_ReadReg(reg) self.MFRC522_WriteReg(reg, tmp & (~mask)) def MFRC522_ToCard(self, command, sendData): retStatus = self.MI_OK backData = [] backLen = 0 irqEn = 0x00 waitIRq = 0x00 lastBits = None n = 0 i = 0 if command == self.PCD_AUTHENT: irqEn = 0x12 waitIRq = 0x10 if command == self.PCD_TRANSCEIVE: irqEn = 0x77 waitIRq = 0x30 self.MFRC522_WriteReg(self.CommIEnReg, irqEn|0x80) # enable interupt self.MFRC522_ClearRegBitMask(self.CommIrqReg, 0x80) # clear interupt flags self.MFRC522_SetRegBitMask(self.FIFOLevelReg, 0x80) # init FIFO self.MFRC522_WriteReg(self.CommandReg, self.PCD_IDLE) # cancel current command for i in range(len(sendData)): self.MFRC522_WriteReg(self.FIFODataReg, sendData[i]) self.MFRC522_WriteReg(self.CommandReg, command) if command == self.PCD_TRANSCEIVE: self.MFRC522_SetRegBitMask(self.BitFramingReg, 0x80) i = 2000 while True: n = self.MFRC522_ReadReg(self.CommIrqReg) i -= 1 if ~((i!=0) and ~(n&0x01) and ~(n&waitIRq)): break self.MFRC522_ClearRegBitMask(self.BitFramingReg, 0x80) if i != 0: if (self.MFRC522_ReadReg(self.ErrorReg) & 0x1B) == 0x00: if n & irqEn & 0x01: retStatus = self.MI_NOTAGERR if command == self.PCD_TRANSCEIVE: n = self.MFRC522_ReadReg(self.FIFOLevelReg) lastBits = self.MFRC522_ReadReg(self.ControlReg) & 0x07 if lastBits != 0: backLen = (n-1)*8 + lastBits else: backLen = n*8 if n == 0: n = 1 if n > self.MAX_LEN: n = self.MAX_LEN for i in range(n): backData.append(self.MFRC522_ReadReg(self.FIFODataReg)) else: retStatus = self.MI_ERR else: retStatus = self.MI_TIMEOUT return (retStatus, backData, backLen) def _CalulateCRC(self, indata): self.MFRC522_ClearRegBitMask(self.DivIrqReg, 0x04) self.MFRC522_SetRegBitMask(self.FIFOLevelReg, 0x80) for i in range(len(indata)): self.MFRC522_WriteReg(self.FIFODataReg, indata[i]) self.MFRC522_WriteReg(self.CommandReg, self.PCD_CALCCRC) i = 255 while True: n = self.MFRC522_ReadReg(self.DivIrqReg) i -= 1 if ~((i != 0) and ~(n&0x04)): break crc = [] crc.append(self.MFRC522_ReadReg(self.CRCResultRegL)) crc.append(self.MFRC522_ReadReg(self.CRCResultRegM)) return crc # function : read block # parameter : blockAddr(0~63) # return : retStatus # backData[16] def MFRC522_ReadBolock(self, blockAddr): retStatus = self.MI_OK # cmd: 0x0c # buf: 0x30 blockAddr crc[2] buf = [] buf.append(self.PICC_READ) buf.append(blockAddr) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backLen != 8*self.MAX_LEN): retStatus = self.MI_ERR return (retStatus, backData) # function : write block # parameter : blockAddr(0~63) # writeData[16] # return : retStatus def MFRC522_WriteBlock(self, blockAddr, writeData): retStatus = self.MI_OK # cmd: 0x0c # buf: 0xA0 blockAddr crc[2] buf = [] buf.append(self.PICC_WRITE) buf.append(blockAddr) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or ((backData[0]&0x0F) != 0x0A) or (backLen != 4): retStatus = self.MI_ERR if status == self.MI_OK: # cmd: 0x0c # buf: writeData[16] crc[2] buf2 = [] for i in range(16): buf2.append(writeData[i]) crc = self._CalulateCRC(buf2) buf2.append(crc[0]) buf2.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf2) if (status != self.MI_OK) or ((backData[0]&0x0F) != 0x0A) or (backLen != 4): retStatus = self.MI_ERR return retStatus def MFRC522_Init(self): self.MFRC522_Reset() self.MFRC522_WriteReg(self.TModeReg, 0x8D) self.MFRC522_WriteReg(self.TPrescalerReg, 0x3E) self.MFRC522_WriteReg(self.TReloadRegL, 30) self.MFRC522_WriteReg(self.TReloadRegH, 0) self.MFRC522_WriteReg(self.TxAutoReg, 0x40) self.MFRC522_WriteReg(self.ModeReg, 0x3D) self.MFRC522_AntennaOn() def MFRC522_Reset(self): # reg: 0x01 # buf: 0x0F self.MFRC522_WriteReg(self.CommandReg, self.PCD_RESETPHASE) def MFRC522_AntennaOn(self): # reg: 0x14 # buf: 0bxxxxxx11 temp = self.MFRC522_ReadReg(self.TxControlReg) if not(temp & 0x03): self.MFRC522_SetRegBitMask(self.TxControlReg, 0x03) def MFRC522_AntennaOff(self): # reg: 0x14 # buf: 0bxxxxxx00 self.MFRC522_ClearRegBitMask(self.TxControlReg, 0x03) # function : detect card # parameter : reqMode: detect mode # 0x52 = detect all cards # 0x26 = detect not sleep cards # return : retStatus # backData: card type, 2 bytes # 0x4400 = Mifare_UltraLight # 0x0400 = Mifare_One(S50) # 0x0200 = Mifare_One(S70) # 0x0800 = Mifare_Pro(X) # 0x4403 = Mifare_DESFire def MFRC522_Request(self, reqMode): retStatus = self.MI_OK self.MFRC522_WriteReg(self.BitFramingReg, 0x07) # cmd: 0x0c # buf: 0x26/0x52 buf = [] buf.append(reqMode) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backLen != 0x10): retStatus = self.MI_ERR return (retStatus, backData) # function : anticoll # parameter : # return : retStatus # backData(Uid, 4 bytes) def MFRC522_Anticoll(self): retStatus = self.MI_OK serNumCheck = 0 self.MFRC522_WriteReg(self.BitFramingReg, 0x00) # cmd: 0x0c # buf: 0x93 0x20 buf = [] buf.append(self.PICC_ANTICOLL) buf.append(0x20) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status==self.MI_OK) and (len(backData)==5): for i in range(4): serNumCheck ^= backData[i] if serNumCheck != backData[4]: retStatus = self.MI_ERR else: retStatus = self.MI_ERR return (retStatus, backData) # function : select card # parameter : Uid # return : retStatus def MFRC522_Select(self, Uid): retStatus = self.MI_OK serNumCheck = 0 # cmd: 0x0c # buf: 0x93 0x70 Uid[4] check crc[2] buf = [] buf.append(self.PICC_SElECTTAG) buf.append(0x70) for i in range(4): buf.append(Uid[i]) serNumCheck ^= Uid[i] buf.append(serNumCheck) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backLen != 0x18): retStatus = self.MI_ERR return retStatus # function : auth sectorkey # parameter : authMode(PICC_AUTHENT1A/PICC_AUTHENT1B) # blockAddr # sectorkey(6 bytes) # Uid(4 bytes) # return : retStatus def MFRC522_Auth(self, authMode, blockAddr, sectorkey, Uid): retStatus = self.MI_OK # cmd: 0x0e # buf: authMode blockAddr sectorkey[6] Uid[4] buf = [] buf.append(authMode) buf.append(blockAddr) for i in range(6): buf.append(sectorkey[i]) for i in range(4): buf.append(Uid[i]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_AUTHENT, buf) if (status != self.MI_OK) or not(self.MFRC522_ReadReg(self.Status2Reg)&0x08): retStatus = self.MI_ERR return retStatus # function : idle # parameter : # return : retStatus def MFRC522_Halt(self): retStatus = self.MI_OK # cmd: 0x0c # buf: 0x50 0x00 crc[2] buf = [] buf.append(self.PICC_HALT) buf.append(0) crc = self._CalulateCRC(buf) buf.append(crc[0]) buf.append(crc[1]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) retStatus = status return retStatus def MFRC522_WriteCmd40(self): retStatus = self.MI_OK self.MFRC522_WriteReg(self.BitFramingReg, 0x07) # cmd: 0x0c # buf: 0x40 buf = [] buf.append(0x40) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backData[0] != 0x0a): retStatus = status return retStatus def MFRC522_WriteCmd43(self): retStatus = self.MI_OK self.MFRC522_WriteReg(self.BitFramingReg, 0x00) # cmd: 0x0c # buf: 0x43 buf = [] buf.append(0x43) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) if (status != self.MI_OK) or (backData[0] != 0x0a): retStatus = status return retStatus def MFRC522_StopCrypto1(self): self.MFRC522_ClearRegBitMask(self.Status2Reg, 0x08) def MFRC522_CloseSPI(self): spi.closeSPI(self.dev0) main.py: import RPi.GPIO as GPIO import MFRC522 import signal rc = MFRC522.MFRC522() dataBlock0 = [0x65, 0xa0, 0x8a, 0xe1, 0xae, 0x08, 0x04, 0x00, 0x01, 0x69, 0x21, 0x1a, 0x3c, 0xeb, 0xa9, 0x1d] sectorkey = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff] def read_block0(): (status, tagType) = rc.MFRC522_Request(rc.PICC_REQIDL) if status != rc.MI_OK: print("MFRC522_Request error") return print("MFRC522_Request success, tagType: %#x %#x" %(tagType[0], tagType[1])) (status, Uid) = rc.MFRC522_Anticoll() if status != rc.MI_OK: print("MFRC522_Anticoll error") return print("MFRC522_Anticoll success, Uid: %#x %#x %#x %#x" %(Uid[0], Uid[1], Uid[2], Uid[3])) status = rc.MFRC522_Select(Uid) if status != rc.MI_OK: print("MFRC522_Select error") return print("MFRC522_Select success") status = rc.MFRC522_Auth(rc.PICC_AUTHENT1A, 1, sectorkey, Uid) if status != rc.MI_OK: print("MFRC522_Auth error") return print("MFRC522_Auth success") (status, dataBlock0) = rc.MFRC522_ReadBolock(0) if status != rc.MI_OK: print("MFRC522_ReadBolock error") return print("MFRC522_ReadBolock success, block0: %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x %#x" %(dataBlock0[0], dataBlock0[1], dataBlock0[2], dataBlock0[3], dataBlock0[4], dataBlock0[5], dataBlock0[6], dataBlock0[7], dataBlock0[8], dataBlock0[9], dataBlock0[10], dataBlock0[11], dataBlock0[12], dataBlock0[13], dataBlock0[14], dataBlock0[15])) rc.MFRC522_StopCrypto1() def write_block0(): (status, tagType) = rc.MFRC522_Request(rc.PICC_REQIDL) if status != rc.MI_OK: print("MFRC522_Request error") return print("MFRC522_Request success, tagType: %#x %#x" %(tagType[0], tagType[1])) (status, Uid) = rc.MFRC522_Anticoll() if status != rc.MI_OK: print("MFRC522_Anticoll error") return print("MFRC522_Anticoll success, Uid: %#x %#x %#x %#x" %(Uid[0], Uid[1], Uid[2], Uid[3])) status = rc.MFRC522_Select(Uid) if status != rc.MI_OK: print("MFRC522_Select error") return print("MFRC522_Select success") status = rc.MFRC522_Halt() print("MFRC522_Halt %d" %status) status = rc.MFRC522_WriteCmd40() if (status != rc.MI_OK): print("MFRC522_ToCard 0x40 error, status:%d" %status) return print("MFRC522_ToCard 0x40 success") status = rc.MFRC522_WriteCmd43() if (status != rc.MI_OK): print("MFRC522_ToCard 0x43 error, status:%d" %status) return print("MFRC522_ToCard 0x43 success") status = rc.MFRC522_WriteBlock(0, dataBlock0) if status != rc.MI_OK: print("MFRC522_WriteBlock error") return print("MFRC522_WriteBlock success") rc.MFRC522_StopCrypto1() def closeSPI(): rc.MFRC522_CloseSPI() if __name__ == '__main__': while True: action = input("Enter action r/w: ") if action == 'r': read_block0() elif action == 'w': write_block0() elif action == 'q': closeSPI() break print("exit procedure") ``` 下面是执行解过,读取成功,但是写入报错超时: ![图片说明](https://img-ask.csdn.net/upload/201910/28/1572228464_990828.png)
java 通过浏览器访问本地服务器打开一个html文件总是找不到路径
文件路径正确,并且绝对路径和相对路径都已经尝试,为啥一直报相同错误。 ``` package day29; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class BS { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(8888); while (true){ Socket ac = ss.accept(); new Thread(new Runnable() { @Override public void run() { try { InputStream is = ac.getInputStream(); BufferedReader bf = new BufferedReader(new InputStreamReader(is)); String s = bf.readLine(); System.out.println(s); String[] s1 = s.split(" "); String sub = s1[1].substring(1); System.out.println(sub); FileInputStream fis = new FileInputStream(sub); OutputStream os = ac.getOutputStream(); // 写入HTTP协议响应头,固定写法 os.write("HTTP/1.1 200 OK\r\n".getBytes()); os.write("Content-Type:text/html\r\n".getBytes()); // 必须要写入空行,否则浏览器不解析 os.write("\r\n".getBytes()); int len = 0; byte[] b = new byte[1024]; while ((len = fis.read(b)) != -1){ os.write(b); fis.close(); ac.close(); } }catch (IOException E){ E.printStackTrace(); } } }).start(); } } } ``` ![图片说明](https://img-ask.csdn.net/upload/202001/16/1579188286_656266.jpg)
java 读取各种类型文件的二进制并且写入到这些类型的文件,内容等等都不变。
问题:如题!!!!! 我现在是用java读取了txt、word、execl三种类型的文件。并且得到他们的二进制流(也就是byte数组)。 我要怎么通过这个byte数组写入到这些类型的文件中(注:内容不变、文件类型不变、总之所有的东西都不变,还是原来一模一样的东西)。 请问我应该怎么实现呢? 读取文件代码,并且得到byte[]. [code="java"]public byte[] readFile(String filename){ // System.out.println("read file " + filename); try{ if(filename==null || filename.equals("")) { System.out.println("filename is invalid.filename=" + filename); return new byte[0]; } File file =new File(filename); long len = file.length(); byte[] bytes = new byte[(int)len]; try{ BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(file)); int r = bufferedInputStream.read( bytes ); if (r != len) throw new IOException("读取文件不正确"); bufferedInputStream.close(); }catch(Exception ex){ ex.printStackTrace(); System.out.println("Read file Exception,filename=" + filename+"---"+ex); } return bytes; }catch(Exception ex){ System.out.println("Read file Exception,filename=" + filename+"---"+ex); } return new byte[0]; }[/code] 得到byte数组后,直接写入到指定类型的文件。 [code="java"]try { FileOutputStream fos3 = new FileOutputStream("D://tmp/mailTest/outTest.txt"); PrintWriter out3 = new PrintWriter(fos3); out3.print(new String(bytes)); out3.flush(); out3.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }[/code]
采用结构体类型数组来存储5名学生的学号、姓名、以及4门课的成绩, 输出各个学生4门课程的平均分,统计平均80分以上学生的人数,并将上述结果写入一个文件并保存
采用结构体类型数组来存储5名学生的学号、姓名、以及4门课的成绩, 输出各个学生4门课程的平均分,统计平均80分以上学生的人数,并将上述结果写入一个文件并保存
求Java中将集合写入YSS文件的方法
**YSS文件是什么? 现要将数据库查询的数据写入到YSS文件中。 YSS文件规则是什么?怎么写入?**
Qt操作数据库读取整个表的数据按行写入文件
各位大牛,如何使用Qt创建数据表,然后排序后,再一行一行(不是列)地读出来,写入文件中呢? select * from 表名 然后呢,value(0),value(1)这种是一行中的第1和第二个值吗?
java io流写入文件的问题
写入内容到文件中,怎么样在能实现在linux下和windows下都能换行,为什么我用记事本打开就没换行,用notp打开就换行了?????
linux重要文件被windows覆盖了,有什么恢复方法?
1、安装了windows+deepin双系统,在windows磁盘管理中linux分区显示为未分配这个很奇怪。 2、在windows里面创建了exfat格式分区,因为可以不同的系统都可以写入而不只是读取。 3、我在这个exfat分区工作了几天,里面放了很多重要文件 4、重启登陆了一次windows结果分区里的文件似乎和原来windows初建是的文件目录保持一致,再次进入linux文件都被覆盖掉了,很着急。 5、应该有数据恢复的工具,只是在linux下如何操作还望大家帮忙想想办法。
Qt从数据库读取数据写入文件时内存溢出
我将400万行字符串(每行大概33byte)插入了数据库及中,当我再从数据库中把这些数据写入文件时,程序崩溃了,提示内存溢出 ``` **In file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 508: Out of memory** ``` 以下是写入文件的代码: ``` if (!m_database->m_db.open()) //m_db是数据库名 return; m_database->m_db.transaction(); QSqlQuery query(m_database->m_db); bool ret = query.exec("select * from validation order by VALIDATION asc"); //这是按照字段VALIDATION来升序排序表中数据后取所有数据,不知道这样好不好,还是说该按照一行一行的来取 if (!ret) { qDebug() << query.lastError().driverText() << endl; return; } unsigned int line = 0; while (query.next()) { QString content = QString("%1\n").arg(query.value(0).toString()); valfile.write(content.toLatin1()); //valfile是QFile类型,要写入的文件 line++; if (line >= 1000){ line = 0; valfile.flush(); //flush在这里不知道用的对不对 qDebug() << "size of file after flush: " << valfile.size() << endl; } } m_database->m_db.commit(); ``` 在以上代码中,我想,因为数据量太大,那么每次写到文件中1000行,我就flush刷新一下缓冲区,把数据都存入文件,这样缓冲区就空了,就可以继续写。然而我一直盯着任务管理器看,程序在写入文件时内存占用一直在上升,知道程序崩溃,提示内存溢出。 难道是我对缓冲区和flush有什么误解吗??? 求教各位大牛,多谢多谢!!!
新手请教java文件操作的一个小问题~十分感谢
这个类的功能是将任意一个二进制文件中的0压缩成0的数目+0的形式 即:将二进制文件中16进制显示的00压缩成 "0的数目+00的形式" 如00 00 00 1A 压缩成03 00 1A 待压缩文件16进制内容: ![图片说明](https://img-ask.csdn.net/upload/201603/15/1458037363_273551.png) 代码执行后后生成的文件却成了如图所示的情况 ![图片说明](https://img-ask.csdn.net/upload/201603/15/1458037372_804471.png) 求教什么地方出错了,万分感谢。 ``` import java.io.*; public class FileCompression { public static void main(String args[]) throws Exception { FCompression(); } //将二进制文件中16进制显示的00压缩成 "0的数目+00的形式" //如00 00 00 1A 压缩成03 00 1A public static void FCompression()throws Exception { File dFile=new File("E:/Picture Collections/dest.cpac");//压缩生成目标文件 File file = new File("E:/Picture Collections/dest.pac");//待压缩文件 FileInputStream fin=new FileInputStream(file); BufferedInputStream bin=new BufferedInputStream(fin); PushbackInputStream pbin=new PushbackInputStream(bin); //DataInputStream din=new DataInputStream(fin); FileOutputStream fout = new FileOutputStream(dFile,true); DataOutputStream dout=new DataOutputStream(fout); byte[] bt=new byte[1]; int len=0; int i=0;//i代表00 的数目 1byte=2个16进制位 int temp; while( (len = fin.read(bt)) != -1 ) { if (bt[0]==0&&(temp=pbin.read())==0)//若读取的数和它后的数字都为0则跳过 { pbin.unread(temp);//推回预读的下一位 i++; //调试语句System.out.println("--"+i); } else if (bt[0]==0&&(temp=pbin.read())!=0)//若读取的数为0,但它后的数不为0 { pbin.unread(temp); i++; //调试语句System.out.println("+++++++"); dout.writeByte(i);//写入00 的个数 dout.writeByte(0);//写入0 i=0;//重置i } else { //调试语句System.err.println("----"); fout.write(bt,0,len); } } dout.close(); pbin.close(); System.out.println("Compress successfully"); } } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
相关热词 如何提升c#开发能力 矩阵乘法c# c#调用谷歌浏览器 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天
立即提问