InputStream,int,shot,long与byte数组之间的互相转换

本文详细介绍了流操作工具类的功能,包括InputStream转为byte、byte转为InputStream、短整型与字节的转换、字节的转换与短整型、整型与字节数组的转换、字节数组和整型的转换、字节数组和长整型的转换等功能,并提供了实际代码示例。

没别的,直接上代码!

 

package com.dst.util;

import java.io.*;

/**
 * 流操作工具类
 * 
 * @author 崔素强
 */
public class StreamTool {

	/**
	 * @方法功能 InputStream 转为 byte
	 * @param InputStream
	 * @return 字节数组
	 * @throws Exception
	 */
	public static byte[] inputStream2Byte(InputStream inStream)
			throws Exception {
		// ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
		// byte[] buffer = new byte[1024];
		// int len = -1;
		// while ((len = inStream.read(buffer)) != -1) {
		// outSteam.write(buffer, 0, len);
		// }
		// outSteam.close();
		// inStream.close();
		// return outSteam.toByteArray();
		int count = 0;
		while (count == 0) {
			count = inStream.available();
		}
		byte[] b = new byte[count];
		inStream.read(b);
		return b;
	}

	/**
	 * @方法功能 byte 转为 InputStream
	 * @param 字节数组
	 * @return InputStream
	 * @throws Exception
	 */
	public static InputStream byte2InputStream(byte[] b) throws Exception {
		InputStream is = new ByteArrayInputStream(b);
		return is;
	}

	/**
	 * @功能 短整型与字节的转换
	 * @param 短整型
	 * @return 两位的字节数组
	 */
	public static byte[] shortToByte(short number) {
		int temp = number;
		byte[] b = new byte[2];
		for (int i = 0; i < b.length; i++) {
			b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位
			temp = temp >> 8; // 向右移8位
		}
		return b;
	}

	/**
	 * @功能 字节的转换与短整型
	 * @param 两位的字节数组
	 * @return 短整型
	 */
	public static short byteToShort(byte[] b) {
		short s = 0;
		short s0 = (short) (b[0] & 0xff);// 最低位
		short s1 = (short) (b[1] & 0xff);
		s1 <<= 8;
		s = (short) (s0 | s1);
		return s;
	}

	/**
	 * @方法功能 整型与字节数组的转换
	 * @param 整型
	 * @return 四位的字节数组
	 */
	public static byte[] intToByte(int i) {
		byte[] bt = new byte[4];
		bt[0] = (byte) (0xff & i);
		bt[1] = (byte) ((0xff00 & i) >> 8);
		bt[2] = (byte) ((0xff0000 & i) >> 16);
		bt[3] = (byte) ((0xff000000 & i) >> 24);
		return bt;
	}

	/**
	 * @方法功能 字节数组和整型的转换
	 * @param 字节数组
	 * @return 整型
	 */
	public static int bytesToInt(byte[] bytes) {
		int num = bytes[0] & 0xFF;
		num |= ((bytes[1] << 8) & 0xFF00);
		num |= ((bytes[2] << 16) & 0xFF0000);
		num |= ((bytes[3] << 24) & 0xFF000000);
		return num;
	}

	/**
	 * @方法功能 字节数组和长整型的转换
	 * @param 字节数组
	 * @return 长整型
	 */
	public static byte[] longToByte(long number) {
		long temp = number;
		byte[] b = new byte[8];
		for (int i = 0; i < b.length; i++) {
			b[i] = new Long(temp & 0xff).byteValue();
			// 将最低位保存在最低位
			temp = temp >> 8;
			// 向右移8位
		}
		return b;
	}

	/**
	 * @方法功能 字节数组和长整型的转换
	 * @param 字节数组
	 * @return 长整型
	 */
	public static long byteToLong(byte[] b) {
		long s = 0;
		long s0 = b[0] & 0xff;// 最低位
		long s1 = b[1] & 0xff;
		long s2 = b[2] & 0xff;
		long s3 = b[3] & 0xff;
		long s4 = b[4] & 0xff;// 最低位
		long s5 = b[5] & 0xff;
		long s6 = b[6] & 0xff;
		long s7 = b[7] & 0xff; // s0不变
		s1 <<= 8;
		s2 <<= 16;
		s3 <<= 24;
		s4 <<= 8 * 4;
		s5 <<= 8 * 5;
		s6 <<= 8 * 6;
		s7 <<= 8 * 7;
		s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7;
		return s;
	}
}

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

package N2; /* In this ordinary autumn We drift away without a sound Stepping out of autumn’s hush */ import java.io.IOException; import java.io.InputStream; import java.util.*; public class C{ static final long mod=1000000007; static final FastScanner in = new FastScanner(); static final StringBuilder out = new StringBuilder(); static ArrayList<ArrayList<Integer>> ed; static int ans=0; static int k; static long[] d; public static void main(String[] args) throws Exception { // 如果需要更大栈(例如深度递归),可以先用线程启动: // new Thread(null, Main::run, "main", 1<<26).start(); run(); System.out.print(out.toString()); } static void run() { try { int t =1; while (t-- > 0) { solve(); } } catch (Exception e) { e.printStackTrace(); } } static void solve() throws Exception { String a=in.next(); int n=0; int op=0; for(int i=0;i<a.length();i++) { if(a.charAt(i)=='0') { n++; if(i!=a.length()-1) { if(a.charAt(i+1)=='0') { op+=1; } } else { if(a.charAt(0)=='0') { op+=1; } } } } double re=(double)n/a.length(); double shot=(double)op/n; if(shot>re) { out.append("SHOOT"); } else if(re>shot) { out.append("ROTATE"); } else { out.append("EQUAL"); } } static class Pair implements Comparable<Pair>{ int x; int y; public Pair(int x, int y) { this.x=x;this.y=y; } public int compareTo(Pair p) { return Long.compare(y, p.y); } } // ================= FastScanner ================= static final class FastScanner { private final InputStream in = System.in; private final byte[] buffer = new byte[1 << 16]; private int ptr = 0, len = 0; private int read() throws IOException { if (ptr >= len) { len = in.read(buffer); ptr = 0; if (len <= 0) return -1; } return buffer[ptr++]; } private int skip() throws IOException { int c; while ((c = read()) <= ' ' && c >= 0) ; return c; } public String next() throws IOException { int c = skip(); if (c < 0) return null; StringBuilder sb = new StringBuilder(); for (; c > ' '; c = read()) sb.append((char) c); return sb.toString(); } public int nextInt() throws IOException { int c = skip(); if (c < 0) return Integer.MIN_VALUE; int sign = 1; if (c == '-') { sign = -1; c = read(); } int val = 0; for (; c > ' '; c = read()) val = val * 10 + (c - '0'); return val * sign; } public long nextLong() throws IOException { int c = skip(); if (c < 0) return Long.MIN_VALUE; long sign = 1; if (c == '-') { sign = -1; c = read(); } long val = 0; for (; c > ' '; c = read()) val = val * 10 + (c - '0'); return val * sign; } public double nextDouble() throws IOException { String s = next(); return s == null ? Double.NaN : Double.parseDouble(s); } public String nextLine() throws IOException { StringBuilder sb = new StringBuilder(); int c = read(); if (c < 0) return null; while (c == '\r' || c == '\n') { c = read(); if (c < 0) return null; } for (; c >= 0 && c != '\n' && c != '\r'; c = read()) sb.append((char) c); return sb.toString(); } } // -------- 并查集(DSU) -------- static class DSU { int[] p, r; public DSU(int n) { p = new int[n]; r = new int[n]; for (int i = 0; i < n; i++) p[i] = i; } int find(int x) { return p[x] == x ? x : (p[x] = find(p[x])); } boolean union(int a, int b) { a = find(a); b = find(b); if (a == b) return false; if (r[a] < r[b]) { int t = a; a = b; b = t; } p[b] = a; if (r[a] == r[b]) r[a]++; return true; } } // -------- Fenwick / Binary Indexed Tree (1-indexed) -------- static class Fenwick { int n; long[] f; Fenwick(int n) { this.n = n; f = new long[n + 1]; } void add(int i, long delta) { for (; i <= n; i += i & -i) f[i] += delta; } long sum(int i) { long s = 0; for (; i > 0; i -= i & -i) s += f[i]; return s; } long sum(int l, int r) { if (r < l) return 0; return sum(r) - sum(l - 1); } } // -------- 迭代线段树(区间和,点更新) -------- static class SegTree { int n; long[] t; SegTree(int n) { this.n = 1; while (this.n < n) this.n <<= 1; t = new long[this.n << 1]; } void set(int pos, long val) { // point assign int i = pos + n; t[i] = val; for (i >>= 1; i > 0; i >>= 1) t[i] = t[i << 1] + t[i << 1 | 1]; } void add(int pos, long delta) { int i = pos + n; t[i] += delta; for (i >>= 1; i > 0; i >>= 1) t[i] = t[i << 1] + t[i << 1 | 1]; } long query(int l, int r) { // inclusive [l,r] l += n; r += n; long res = 0; while (l <= r) { if ((l & 1) == 1) res += t[l++]; if ((r & 1) == 0) res += t[r--]; l >>= 1; r >>= 1; } return res; } } // -------- Sparse Table (RMQ) -------- static class SparseTable { int n, LOG; int[][] st; // min int[] lg; SparseTable(int[] a) { n = a.length; LOG = 32 - Integer.numberOfLeadingZeros(n); st = new int[LOG][n]; lg = new int[n + 1]; for (int i = 2; i <= n; i++) lg[i] = lg[i >> 1] + 1; System.arraycopy(a, 0, st[0], 0, n); for (int k = 1; k < LOG; k++) for (int i = 0; i + (1 << k) <= n; i++) st[k][i] = Math.min(st[k - 1][i], st[k - 1][i + (1 << (k - 1))]); } int query(int l, int r) { int k = lg[r - l + 1]; return Math.min(st[k][l], st[k][r - (1 << k) + 1]); } } // -------- Dijkstra(邻接表) -------- static class Dijkstra { static long[] dijkstra(int n, ArrayList<int[]>[] g, int src) { long[] dist = new long[n]; Arrays.fill(dist, Long.MAX_VALUE); PriorityQueue<long[]> pq = new PriorityQueue<>(Comparator.comparingLong(a -> a[0])); dist[src] = 0; pq.add(new long[]{0, src}); while (!pq.isEmpty()) { long[] cur = pq.poll(); long du = cur[0]; int u = (int) cur[1]; if (du != dist[u]) continue; for (int[] e : g[u]) { int v = e[0]; int w = e[1]; if (dist[v] > du + w) { dist[v] = du + w; pq.add(new long[]{dist[v], v}); } } } return dist; } } // -------- Dinic 最大流(邻接表 + 边对象) -------- static class Dinic { static class Edge { int v; int rev; int cap; Edge(int v, int rev, int cap){this.v=v;this.rev=rev;this.cap=cap;} } int n, s, t; ArrayList<Edge>[] g; int[] level, it; @SuppressWarnings("unchecked") Dinic(int n, int s, int t) { this.n = n; this.s = s; this.t = t; g = new ArrayList[n]; for (int i = 0; i < n; i++) g[i] = new ArrayList<>(); level = new int[n]; it = new int[n]; } void addEdge(int u, int v, int cap){ g[u].add(new Edge(v, g[v].size(), cap)); g[v].add(new Edge(u, g[u].size() - 1, 0)); } boolean bfs() { Arrays.fill(level, -1); Deque<Integer> dq = new ArrayDeque<>(); dq.add(s); level[s] = 0; while (!dq.isEmpty()) { int u = dq.poll(); for (Edge e : g[u]) if (e.cap > 0 && level[e.v] < 0) { level[e.v] = level[u] + 1; dq.add(e.v); } } return level[t] >= 0; } int dfs(int u, int f) { if (u == t) return f; for (int i = it[u]; i < g[u].size(); i++, it[u]++) { Edge e = g[u].get(i); if (e.cap > 0 && level[e.v] == level[u] + 1) { int ret = dfs(e.v, Math.min(f, e.cap)); if (ret > 0) { e.cap -= ret; g[e.v].get(e.rev).cap += ret; return ret; } } } return 0; } long maxFlow() { long flow = 0; while (bfs()) { Arrays.fill(it, 0); int f; while ((f = dfs(s, Integer.MAX_VALUE)) > 0) flow += f; } return flow; } } // -------- 组合数(阶乘 / 逆元) -------- static class Comb { int MAX; long MOD; long[] fact, ifact; Comb(int max, long mod) { MAX = max; MOD = mod; fact = new long[MAX + 1]; ifact = new long[MAX + 1]; fact[0] = 1; for (int i = 1; i <= MAX; i++) fact[i] = (fact[i - 1] * i) % MOD; ifact[MAX] = modInv(fact[MAX], MOD); for (int i = MAX; i > 0; i--) ifact[i - 1] = (ifact[i] * i) % MOD; } public long powInv(long powMod, long mod2) { // TODO Auto-generated method stub return 0; } long nCk(int n, int k) { if (k < 0 || k > n) return 0; return (((fact[n] * ifact[k]) % MOD) * ifact[n - k]) % MOD; } long modPow(long a, long e){ long r = 1; a %= MOD; while (e > 0) { if ((e & 1) == 1) r = (r * a) % MOD; a = (a * a) % MOD; e >>= 1; } return r; } long modInv(long a, long mod){ return modPow(a, mod - 2); } } // ================= 极简快速堆(用于 Dijkstra) ================= // 使用 long 打包 (distance << 32) | node;避免对象分配 static final class FastHeap { long[] a; int size; FastHeap(int cap){ a = new long[cap]; size = 0; } void push(long x){ if (size >= a.length) a = Arrays.copyOf(a, a.length << 1); a[size++] = x; siftUp(size - 1); } long pop(){ long r = a[0]; a[0] = a[--size]; siftDown(0); return r; } boolean isEmpty(){ return size == 0; } void siftUp(int i){ long v = a[i]; while (i > 0){ int p = (i - 1) >> 1; if (a[p] <= v) break; a[i] = a[p]; i = p; } a[i] = v; } void siftDown(int i){ long v = a[i]; int n = size; while (true){ int l = i << 1 | 1; if (l >= n) break; int r = l + 1; int j = (r < n && a[r] < a[l]) ? r : l; if (a[j] >= v) break; a[i] = a[j]; i = j; } a[i] = v; } } // ================= IntDeque(双端队列,array-based) ================= static final class IntDeque { int[] a; int head, tail, n; IntDeque(int cap){ n = 1; while (n < cap) n <<= 1; a = new int[n]; head = tail = 0; } void addLast(int x){ a[tail++] = x; if (tail == n) tail = 0; if (tail == head) expand(); } void addFirst(int x){ if (--head < 0) head = n - 1; if (tail == head) expand(); a[head] = x; } int pollFirst(){ int v = a[head++]; if (head == n) head = 0; return v; } int pollLast(){ if (--tail < 0) tail = n - 1; return a[tail]; } boolean isEmpty(){ return head == tail; } void expand(){ int[] b = new int[n << 1]; int i = 0; while (!isEmpty()) b[i++] = pollFirst(); n <<= 1; a = b; head = 0; tail = i; } } // ================= Tarjan SCC(递归) ================= static final class TarjanSCC { int n, t, sccCnt; int[] dfn, low, st; boolean[] inStack; ArrayList<Integer>[] g; int sp; TarjanSCC(ArrayList<Integer>[] g){ this.g = g; n = g.length; dfn = new int[n]; low = new int[n]; st = new int[n]; inStack = new boolean[n]; t = 1; sp = 0; sccCnt = 0; dfsAll(); } void dfsAll(){ for (int i = 0; i < n; i++) if (dfn[i] == 0) dfs(i); } void dfs(int u){ dfn[u] = low[u] = t++; st[sp++] = u; inStack[u] = true; for (int v : g[u]){ if (dfn[v] == 0){ dfs(v); low[u] = Math.min(low[u], low[v]); } else if (inStack[v]) low[u] = Math.min(low[u], dfn[v]); } if (low[u] == dfn[u]){ while (true){ int v = st[--sp]; inStack[v] = false; if (v == u) break; } sccCnt++; } } } // ================= Hopcroft-Karp 二分图最大匹配 ================= static final class HopcroftKarp { int nL, nR; ArrayList<Integer>[] g; int[] dist, matchR, matchL; HopcroftKarp(int nL, int nR){ this.nL = nL; this.nR = nR; g = new ArrayList[nL]; for (int i=0;i<nL;i++) g[i]=new ArrayList<>(); matchL = new int[nL]; Arrays.fill(matchL, -1); matchR = new int[nR]; Arrays.fill(matchR, -1); dist = new int[nL]; } void addEdge(int u,int v){ g[u].add(v); } boolean bfs(){ Queue<Integer> q = new ArrayDeque<>(); for (int i=0;i<nL;i++){ if (matchL[i]==-1){ dist[i]=0; q.add(i);} else dist[i]=-1;} boolean reach=false; while(!q.isEmpty()){ int u=q.poll(); for(int v:g[u]){ int mu=matchR[v]; if(mu!=-1 && dist[mu]==-1){ dist[mu]=dist[u]+1; q.add(mu);} if(mu==-1) reach=true; } } return reach; } boolean dfs(int u){ for(int v:g[u]){ int mu=matchR[v]; if(mu==-1 || (dist[mu]==dist[u]+1 && dfs(mu))){ matchL[u]=v; matchR[v]=u; return true;} } dist[u]=-1; return false; } int maxMatch(){ int res=0; while(bfs()){ for(int i=0;i<nL;i++) if(matchL[i]==-1 && dfs(i)) res++; } return res; } } // ================= LCA(二进制提升) ================= static final class LCA { int n, LOG; int[][] up; int[] depth; ArrayList<Integer>[] g; @SuppressWarnings("unchecked") LCA(int n){ this.n=n; LOG=32-Integer.numberOfLeadingZeros(n); up=new int[LOG][n]; depth=new int[n]; g=new ArrayList[n]; for(int i=0;i<n;i++) g[i]=new ArrayList<>(); } void addEdge(int u,int v){ g[u].add(v); g[v].add(u); } void build(int root){ Deque<Integer> dq=new ArrayDeque<>(); dq.add(root); up[0][root]=root; depth[root]=0; boolean[] vis=new boolean[n]; vis[root]=true; while(!dq.isEmpty()){ int u=dq.poll(); for(int v:g[u]) if(!vis[v]){ vis[v]=true; up[0][v]=u; depth[v]=depth[u]+1; dq.add(v); } } for(int k=1;k<LOG;k++) for(int i=0;i<n;i++) up[k][i]=up[k-1][up[k-1][i]]; } int lca(int a,int b){ if(depth[a]<depth[b]){int t=a;a=b;b=t;} int diff=depth[a]-depth[b]; for(int k=0;k<LOG;k++) if(((diff>>k)&1)==1) a=up[k][a]; if(a==b) return a; for(int k=LOG-1;k>=0;k--) if(up[k][a]!=up[k][b]){ a=up[k][a]; b=up[k][b]; } return up[0][a]; } } // ================= 字符串算法(KMP / Z / Manacher) ================= static int[] kmpTable(char[] s){ int n=s.length; int[] t=new int[n]; t[0]=0; for(int i=1;i<n;i++){ int j=t[i-1]; while(j>0 && s[i]!=s[j]) j=t[j-1]; if(s[i]==s[j]) j++; t[i]=j; } return t; } static int[] zFunction(char[] s){ int n=s.length; int[] z=new int[n]; int l=0,r=0; for(int i=1;i<n;i++){ if(i<=r) z[i]=Math.min(r-i+1,z[i-l]); while(i+z[i]<n && s[z[i]]==s[i+z[i]]) z[i]++; if(i+z[i]-1>r){ l=i; r=i+z[i]-1; } } return z; } static int[] manacher(String s){ int n=s.length(); int[] d1=new int[n]; int l=0,r=-1; for(int i=0;i<n;i++){ int k=(i>r)?1:Math.min(d1[l+r-i], r-i+1); while(0<=i-k && i+k<n && s.charAt(i-k)==s.charAt(i+k)) k++; d1[i]=k--; if(i+k>r){ l=i-k; r=i+k; } } int[] d2=new int[n]; l=0;r=-1; for(int i=0;i<n;i++){ int k=(i>r)?0:Math.min(d2[l+r-i+1], r-i+1); while(0<=i-k-1 && i+k<n && s.charAt(i-k-1)==s.charAt(i+k)) k++; d2[i]=k--; if(i+k>r){ l=i-k-1; r=i+k; } } int[] res = new int[1]; // placeholder if needed return d1; } // -------- 其他小工具 -------- static long gcd(long a, long b) { while (b != 0) { long t = a % b; a = b; b = t; } return Math.abs(a); } static long powMod(long a, long e, long mod) { long r = 1; a %= mod; while (e > 0) { if ((e & 1) == 1) r = (r * a) % mod; a = (a * a) % mod; e >>= 1; } return r; } } 一行一行解释代码
12-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值